@UrushiGo
Front-End

Почему после AJAX запроса к *.php файлу, сервер отправляет текст без html кода?

*.php

<?php
include $_SERVER['DOCUMENT_ROOT'] . '/wordpress/wp-blog-header.php';
$num = $_GET['num'];
$offset = $num * 2 + 1;
query_posts('cat=2&posts_per_page=3&offset=' . $offset);
$answer = '';
while (have_posts()) : the_post();
$answer += '<div class="smallpost"><a href="' . the_permalink() . '" class="header_smallpost">' . the_title() . '</a>
<span class="date">' . the_time(__('j F H:i')) . '</span></div>';
endwhile;
echo $answer;
?>


Ответ: ссылка + заголовок статьи + время (все приходит в одной строчке и без верстки)

JavaScript код:
num = 1;
function loadMore() {
  num += 1;
  if (window.XMLHttpRequest) {
    var xmlhttp = new XMLHttpRequest();
  } else {
    var xmlhttp = new ActiveXObject('Microsoft.XMLHTTP');
  }
  xmlhttp.onreadystatechange = function() {
    document.getElementById('smallposts').innerHTML += xmlhttp.responseText;
  }

  xmlhttp.open('GET', '<?php echo get_template_directory_uri(); ?>/loadmore.php?num=' + num, true);
  xmlhttp.send();
}
  • Вопрос задан
  • 401 просмотр
Решения вопроса 1
@UrushiGo Автор вопроса
Front-End
Нашел несколько ошибок в своем коде. Возможно их описание кому-либо поможет.

Ошибка #1 в JavaScript коде, в обработчике xmlhttp.onreadystatechange:
xmlhttp.onreadystatechange = function() {
    if (xmlhttp.readyState == 4) {
      document.getElementById('smallposts').innerHTML += xmlhttp.responseText;
    }
  }


Ошибка #2 в PHP коде. В переменной $answer хранится строка, а значит присоединять к ней нужно знаком ".=", а не"+=":
$answer .= '<div class="smallpost"><a href="' . get_the_permalink() . '" class="header_smallpost">' . get_the_title() . '</a>
<span class="date">' . get_the_time(__('j F H:i')) . '</span></div>';


Ошибка #3, так-же находится в PHP коде. Для возвращение ссылки на пост, заголовка и времени требуется приставка "get_":
get_the_permalink()
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
DIITHiTech
@DIITHiTech
Fullstack javascript developer
Посмотрите в консоли что отвечает сервер на Ваш запрос. Если все ок - смотрим js
Как минимум обработчик xmlhttp.onreadystatechange неполон.
xhr.onreadystatechange = function () {
   var html, status;
   if (xhr.readyState == 4) {
      if ((status = xhr.status) >= 200 && status < 400) {
           html=xhr.responseText;
           //code
      }else{
           //error status
      }
   }
}
Ответ написан
Комментировать
grigruss
@grigruss
Мне вообще плевать на ИТ, спецов и без меня хватае
Как написано так и отправляется. Никаких тегов в коде php я не вижу, для переменной $answer, а значит и отправляется без них.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы