Вызов Ajax выполнен успешно, но $_POST['value'] пуст

ПРОБЛЕМА РЕШЕНА

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.?

замените это data:{search:search,} на это data:{search:search}. прежде чем вы вызовете ajax, ваш console.info покажет значение? и попробуй изменить свое эхо на это echo json_encode($_POST['search']); для более сложного вы можете inspect element перейти на network вкладку и open in new tab свой search.php файл. это показать ваше ожидаемое значение?

dianeryanto 12.03.2019 09:21

да. console.info(search) показывает значение правильно

Braike dp 12.03.2019 09:25

Проверьте вкладку сети инструментов отладчика вашего браузера и по точному запросу; отправляются ли они в виде данных, закодированных в формате JSON, или в виде данных, закодированных в форме?

deceze 12.03.2019 09:25

как насчет проверки других моих советов?

dianeryanto 12.03.2019 09:25

Я ничего не менял в вашем коде, и он работал нормально. Что находится в init.php? Возможно, что-то там прерывает выполнение кода до того, как он доберется до эха '$_POST['search']`.

Cliff Rono 12.03.2019 09:26

Я попробовал echo json_encode($_POST['search']), и это сработало. После этого я прокомментировал это и попробовал echo $_POST['search'], и на этот раз это тоже сработало. Я понятия не имею, как это сработало.

Braike dp 12.03.2019 09:31

В файле @CliffRono init.php нет никаких проблем, он просто подключает базу данных и некоторые файлы.

Braike dp 12.03.2019 09:34

возможно, ваш js не обновлен, вы можете нажать ctrl + f5 (жесткое обновление), чтобы убедиться, что ваш js обновлен

dianeryanto 12.03.2019 09:45
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
8
96
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

В этом объекте нет лишней пары ключ/значение data:{search:search,}, поэтому не нужно добавлять "," в конце. Вы должны просто использовать data:{search:search}.

Надеюсь, это сработает.

Эта конечная запятая не является проблемой.

Chris G 12.03.2019 09:32

Я думаю, что в нотации объекта JS это проблема. Но спасибо за подсказку.

Abdullah Aziz 12.03.2019 09:36

Не начиная с ES5: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…

Chris G 12.03.2019 09:42

Пожалуйста, объясните, почему запятая в конце была бы проблемой. Если бы этот код был синтаксически неверным, возникла бы какая-то ошибка.

Nico Haase 12.03.2019 09:52
Ответ принят как подходящий

First, you change this data:{search:search,} to this data:{search:search}

Second, try to change your echo in your search.php become this echo json_encode($_POST['search']);

For more complex checking, you can inspect element (press F12 from your browser), go to network tab and open in new tab your search.php file. It is show your expected value?

If search.php shown the expected value, try to hard refresh your browser in windows (ctrl + F5) to try updated your js

Начиная с ECMAScript 5 в объектах разрешено использовать запятые.

Pavel Třupek 12.03.2019 09:46

Можете ли вы объяснить все это дальше? Почему кодирование значение, которое кажется пустым, должно решить проблему? Разве один декодировать не должен публиковать данные в бэкенде?

Nico Haase 12.03.2019 09:51

Я разобрался с проблемой, но понятия не имел о причине и не нашел решения. По сути, include('core/init.php'); не включается. Я попробовал var_dump(include('core/init.php'));, и он возвращается bool(false). Путь правильный. Есть ли что-то, что нужно сделать при вызове с использованием ajax?

Braike dp 12.03.2019 11:25

Удалить запятую в данных: {поиск:поиск,}
Я рекомендую использовать префикс 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 в объектах разрешено использовать запятые.

Pavel Třupek 12.03.2019 09:46

Пожалуйста, добавьте еще несколько пояснений к своему ответу, чтобы ОП мог извлечь из него уроки - что вы изменили и почему?

Nico Haase 12.03.2019 09:52

Отредактировано добавление объяснения.

Hele 12.03.2019 10:38

Другие вопросы по теме