ПРОБЛЕМА РЕШЕНА
The issues seemed to be browser related. Tried with a different system and it works fine.
Я кодирую поиск в реальном времени, чтобы показать информацию о пользователях из базы данных, используя ajax и php. Ввод из полей формы правильно передается в файл ajax. Я проверил с помощью console.info(), и он печатается правильно. После этого Ajax-вызов проходит без ошибок. Но при попытке повторить $_POST['search'] он печатает пустое место.
форма поиска.php
<input type = "text" placeholder = "Search" class = "search"/>
<div class = "search-result"></div>
search.js
$(function(){
$('.search').keyup(function(){
var search = $(this).val();
//console.info(search);
$.ajax({
url:'search.php',
data:{search:search,},
type:'POST',
success:function(data){
console.info(data);
$('.search-result').html(data);
},
error:function(){
console.info("error");
}
});
});
});
search.php
<?php
include('core/init.php');
echo $_POST['search'];
?>
ОТРЕДАКТИРОВАНО
Я разобрался с проблемой, но понятия не имел о причине и не нашел решения. По сути, include('core/init.php'); не включается. Я попробовал var_dump(include('core/init.php'));, и он возвращает bool (false). Путь правильный. Есть ли что-то, что нужно сделать, когда файл с includes вызывается с использованием ajax.?
да. console.info(search) показывает значение правильно
Проверьте вкладку сети инструментов отладчика вашего браузера и по точному запросу; отправляются ли они в виде данных, закодированных в формате JSON, или в виде данных, закодированных в форме?
как насчет проверки других моих советов?
Я ничего не менял в вашем коде, и он работал нормально. Что находится в init.php? Возможно, что-то там прерывает выполнение кода до того, как он доберется до эха '$_POST['search']`.
Я попробовал echo json_encode($_POST['search']), и это сработало. После этого я прокомментировал это и попробовал echo $_POST['search'], и на этот раз это тоже сработало. Я понятия не имею, как это сработало.
В файле @CliffRono init.php нет никаких проблем, он просто подключает базу данных и некоторые файлы.
возможно, ваш js не обновлен, вы можете нажать ctrl + f5 (жесткое обновление), чтобы убедиться, что ваш js обновлен



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


В этом объекте нет лишней пары ключ/значение data:{search:search,}, поэтому не нужно добавлять "," в конце. Вы должны просто использовать data:{search:search}.
Надеюсь, это сработает.
Эта конечная запятая не является проблемой.
Я думаю, что в нотации объекта JS это проблема. Но спасибо за подсказку.
Не начиная с ES5: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…
Пожалуйста, объясните, почему запятая в конце была бы проблемой. Если бы этот код был синтаксически неверным, возникла бы какая-то ошибка.
First, you change this
data:{search:search,}to thisdata:{search:search}Second, try to change your
echoin yoursearch.phpbecome thisecho json_encode($_POST['search']);For more complex checking, you can
inspect element(press F12 from your browser), go tonetworktab and open in new tab yoursearch.phpfile. It is show your expected value?If
search.phpshown the expected value, try to hard refresh your browser in windows (ctrl + F5) to try updated your js
Начиная с ECMAScript 5 в объектах разрешено использовать запятые.
Можете ли вы объяснить все это дальше? Почему кодирование значение, которое кажется пустым, должно решить проблему? Разве один декодировать не должен публиковать данные в бэкенде?
Я разобрался с проблемой, но понятия не имел о причине и не нашел решения. По сути, include('core/init.php'); не включается. Я попробовал var_dump(include('core/init.php'));, и он возвращается bool(false). Путь правильный. Есть ли что-то, что нужно сделать при вызове с использованием ajax?
Удалить запятую в данных: {поиск:поиск,}
Я рекомендую использовать префикс jquery $ для vars, чтобы не запутаться, следующий код работает.
HTML-сторона
<!DOCTYPE html>
<html>
<head>
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script type = "text/javascript">
$(document).ready( function() {
$('#search-btn').on('click', function() {
$search = $('#search-txt').val();
console.info($search);
$.ajax({
url:'search.php',
data:{search: $search},
type:'POST',
success:function(data){
console.info(data);
$('#what-you-searched').html(data);
},
error:function(){
console.info("Error");
}
});
});
});
</script>
</head>
<body>
<input id = "search-txt" type = "text">
<input id = "search-btn" type = "button" value = "search">
<p>You searched</p><p id = "what-you-searched"></p>
</body>
</html>
Сторона PHP
<?php
echo $_POST['search'];
?>
Вот что делает мой код:
$(документ).ready(fuc)
/* код запустится только после того, как объектная модель документа (DOM) страницы будет готова для выполнения кода JavaScript*/
$().on('щелчок', функция) /* прослушиватель: срабатывает, когда пользователь щелкает объект DOM, в данном случае тег ввода поиска (который является кнопкой)*/
Когда пользователь нажимает кнопку «Отправить», $search будет заполнен значением #search-txt, и будет вызван метод Ajax (передача $search в качестве поиска в бэкэнд). Мой бэкэнд PHP просто повторяет искомый контент. JS при успехе заполняет #what-you-searched возвращаемым значением
Начиная с ECMAScript 5 в объектах разрешено использовать запятые.
Пожалуйста, добавьте еще несколько пояснений к своему ответу, чтобы ОП мог извлечь из него уроки - что вы изменили и почему?
Отредактировано добавление объяснения.
замените это
data:{search:search,}на этоdata:{search:search}. прежде чем вы вызовете ajax, ваш console.info покажет значение? и попробуй изменить свое эхо на этоecho json_encode($_POST['search']); для более сложного вы можетеinspect elementперейти наnetworkвкладку иopen in new tabсвойsearch.phpфайл. это показать ваше ожидаемое значение?