Почему не передаются данные AJAX'ом?

Коллеги, ничего не понимаю )))
Суть задачи: по клику на пункте меню вывести контент из БД, соответствующий кликнутому пункту.
Я пошел кривым путем ))) Меню выводится нормально, здесь детали опущу. На странице меню получается вида:
<div id="navblock">
    <ul class="group">
        <li class="line">Пункт (уровень 0)</li>
            <ul class="group">
                <li class="line">Пункт (уровень 1)</li>
                <ul class="group">
                    <li class="line">Пункт (уровень 2)</li>
                </ul>
                <li class="line">Пункт (уровень 1)</li>
            </ul>
            <li class="line">Пункт (уровень 0)</li>
            <ul class="group">
                <li class="line">Пункт (уровень 1)</li>
            </ul>
    </ul>
</div>

Далее, нажатие на любой пункт отрабатываю JavaScript'ом и передаю данные AJAX'ом PHP-обработчику.
JavaScript + AJAX:
$(document).ready(function() {
	$('.line').on('click',function () {
            var inner = this.innerText;
		$('.content_title').text(inner);
		$.ajax({
            type: 'POST',
            url: './includes/excerpt_cls.php',
            data: {bd_item: inner},
            success: function(data){
            	console.log('success'+'\n'+'data =>'+data);
            },
            error:function(data){console.log('error');}
            });
	});
});

Ну, и напоследок, крайне простой PHP:
<?php
class Excerpt {
	public static function getPOST() {
		if(isset($_POST['bd_item'])) {echo "POST is set" . '<br>' . $_POST['bd_item'];}
		else echo "POST is not set";
	}
}
?>

На странице в index.php все это безобразие отображается тоже крайне просто:
<div class="container-fluid">
  <div class="d-flex flex-row">
    <div class="d-flex flex-column-3">
      <div class="leftside">
        <p class="text-center nav_header">заголовок меню</p>
        <div id="navblock">
        здесь вызывается класс, формирующий меню
        </div>
    </div>
  </div>
  <div class="d-flex flex-column-9">
    <div class="content">
      <p class="content_title">все ссылки</p>
      <?php Excerpt::getPOST(); ?>
    </div>
  </div>
  </div>
</div>

И вот в чем проблема: POST-запрос попадает в PHP-обработчик пустым. В той конфигурации, которая указана, в консоли появляется "success data =>", т.е. данные переданы, но параметр AJAX data пуст. В точке вызова класса Excerpt всегда, что бы я не кликал, висит "POST is not set". Но вот если я буду проверять просто наличие массива POST (т.е. if(isset($_POST))..., то появляется "POST is set", но с ошибкой обращения к индексу bd_item.
Я, видимо, вообще не понимаю основ...
  • Вопрос задан
  • 192 просмотра
Пригласить эксперта
Ответы на вопрос 2
@morricone85
<?php Excerpt::getPOST(); ?>

это не надо; что выводится в консоли?
Ответ написан
irishmann
@irishmann
Научись пользоваться дебаггером
Как и в предыдущем вопросе. <?php Excerpt::getPOST(); ?> оно здесь не нужно.
В точке вызова класса Excerpt всегда, что бы я не кликал, висит "POST is not set".

Так и будет, вы его каждый раз вызываете, при обновлении страницы, а так как на index не передается никакой запрос, то класс вам говорит, что пост не найден.

Так же передаете ajax'ом, и принимаете ajax'ом.

success: function(data){
            	//console.log('success'+'\n'+'data =>'+data);
               // вот тут можно какие-то действия производить
               // например вывести то что пришло через алерт
               alert(data);

            },
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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