Проблема с приемом данных JSON в PHP

287
30 августа 2017, 15:52

В общем написал скрипт который собирает все введенное из формы, и посылает данные в PHP. Но тут проблема массив $_POST пуст.

пользуюсь jquery-3.2.1.js.

вот сам скрипт и скрин.

$(function(){
    var button=$("button");
    button.click( function (){
        var data = $("form").serializeArray();
        $.ajax({
            type: "POST",
            url: "registration.php",
            data: {'data':data},
            success: function () {
                alert(data);
                console.log(data);
            },
        });
    });
});

echo "<pre>";
var_dump( $_POST );
echo "</pre>";

В общем в консоли есть объект, а в PHP в массиве пост пусто. Что я делаю не так? Кто знает подскажите?

данные принялись но ка ктогда дальше с ними работать если они сериализованными приходят?????? По отдельности понятно. А вот сериализованными?

Answer 1

Одностраничный пример:

<?php
if(!empty($_POST)){
    $data = $_POST;
    var_dump($data);
    $name = $data['name'];
    $other = $data['other'];
    var_dump($name, $other);
    return;
}
?>
<html>
    <head>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.2.1/jquery.min.js" type="text/javascript"></script>
        <script type="text/javascript">
            var form = {'name':'some name', 'other':'data'};//$("form *").serialize();
            $.ajax({
                type: "POST",
                url: "registration.php",
                data: form,
                success: function (result) {
                    console.log(result);
                },
            });
        </script>
    </head>
    <body>Page opened</body>
</html>
  • Каждый новый запрос к php файлу, не хранит информации о предыдущем, как вам ранее указали, открыть отдельно в браузере и сделать запрос в ajax будут разными запросами с разными данными.
  • Как вам указали в callback функции вы упустили параметр который возвращает ответ от php файла - success: function (result) { - в переменной result вы получите то что ответит php на ваш ajax запрос.
Answer 2

Вы делаете два запроса к registration.php - первый раз, когда просто загружаете страницу, и второй раз, когда отправляете Ajax-запрос.

В первом случае браузер, как обычно, отправляет GET-запрос, чтобы получить содержимое всей страницы. Во втором он асинхронно отправляет POST-запрос с полями вашей формы.

Ваша проблема заключается в том, что вы смотрите на результат первого запроса - то, что браузер получает в ответ на GET-запрос. Для того, чтобы получить ответ на второй вопрос, используйте callback-функцию success() в вашем коде:

success: function (response) {
    console.log(response);
}

Эта функция вызывается при успешной отправке данных Ajax-запросом, и содержит строку с ответом сервера.

Чтобы в следующий раз не запутаться, я бы посоветовал сделать так, чтобы сервер не выводил содержимое $_POST, если это обычный GET-запрос, или отделил скрипт, который принимает POST-запрос, от скрипта, который показывает форму.

READ ALSO
Перенос строк в jQuery [дубликат]

Перенос строк в jQuery [дубликат]

На данный вопрос уже ответили:

424
Градиент svg css, проблема firefox

Градиент svg css, проблема firefox

Заливается svg градиентом прекрасно в chrome,в firefox не работает, пишет не найдено

374
Почему не работает на Iphone, Ipad (Safari)

Почему не работает на Iphone, Ipad (Safari)

Всем ПриветКто сможет помочь? Есть сайт

417
Верстка растянуть элементы [требует правки]

Верстка растянуть элементы [требует правки]

http://prntscrcom/gdycsc подскажите как можно сверстать, чтоб элементы в строке всегда растягивались на всю ширину

275