PHP обработка данных, отправленных JSON - PullRequest
3 голосов
/ 25 октября 2010

Не скажу, что искал и пробовал десятки синтаксисов из интернета.Вы не могли бы сказать, вру я или нет.Итак ...

Это часть моего html (соответствующая часть):

var jsonData = {
    address: 'address',
    address1: 'address1',
    address2: 'address2'
};

var out = JSON.stringify(jsonData);

$.ajax({
    type: "POST",
    contentType: "application/json; charset=utf-8",
    url: "joaca2.php",
    data: out,
    dataType: "html",
    success: function (response) {
        alert(response);
    }
});

А это часть PHP:

<code>$x = json_decode($_POST, true);

// don't worry: it doesn't get to this line below
printf("<pre>%s
", print_r ($ x, 1));

Я старался сделать это как можно более простым, может быть, когда-нибудь в этом году я узнаю о правильном JSON.


Вот чтоЯ получаю:

Последнее изображение, которое я получаю, когда PHP-часть имеет это:

var_dump(file_get_contents('php://input'));

Не начинайте с «Разве это не очевидно ?!». Это так. Я знаю, что говорит эта ошибка. Я просто не знаю, как обойти это. Как я могу получить этот пост? Я видел $ x = json_decode ($ _ POST []) , но это тоже не сработало. Я проверил строковый json с JSONlint, и он был проверен. Я пробовал разные типы массивов, объектов, массивовСвойства, .AJAX, .post (), .get (). У меня нет известных вариантов. Я видел все видыпредложения, и я в значительной степени попробовал их.Я знаю, что что-то упустил, и я, вероятно, взорвусь или убью свою кошку, когда найду это.

Спасибо, как всегда


Iкажется, я прибил это:

Я изменил с данные: 'kkt =' + out в коде.Теперь, используя это:

$x =  json_decode($_POST['kkt'], true);
echo $x['myPostData']['address1'];

... Я могу получить значение.Проблема в том, что я не знаю, как это действительно работает.Я знаю, что это ключ.

Ответы [ 5 ]

6 голосов
/ 25 октября 2010

$ _ POST - это массив всех отправленных элементов ... Вы передаете только один элемент, но не присваиваете ему имя.

Попробуйте использовать

$x = json_decode($_POST[0]);

Хотя я бы сделал следующее:

var out = JSON.stringify({'myPostData' : JSON.stringify(jsonData) });

, а затем:

$x = json_decode($_POST['myPostData']);

Как насчет изменения исходных jsonData для включения основной ветви:

var jsonData = { myPostData: {
    address: 'address',
    address1: 'address1',
    address2: 'address2'
} };

и затем возвращает исходный вызов функции stringify.

2 голосов
/ 29 ноября 2012

Я обнаружил, что просто удалите эту строку из

contentType: "application/json; charset=utf-8",

, тогда вы можете манипулировать данными в строке

1 голос
/ 25 октября 2010

Вы пытаетесь запустить json_decode для всего POST, который является массивом. Вы должны понять, какой ключ содержит вашу строку ajax, и назвать ее так:

json_decode($_POST['key'])

чтобы понять, как называется ваш ключ, просто выведите $ _POST с помощью var_dump ...

1 голос
/ 25 октября 2010

Есть ли причина, по которой вы используете JSON.stringify, если все, что вы хотите сделать, - это преобразовать в массив PHP другой конец?Почему бы не сделать

$.ajax({
    type: "POST",
    url: "joaca2.php",
    data: jsonData, //or whatever name
    dataType: "html",
    success: function (response) {
        alert(response);
    }
});

, а затем в PHP

var_dump($_POST);

Это передаст данные в ваш сценарий в виде пар ключ-значение, а не раздутого представления JSON.Для этого вам должно хватить HTTP-кодирования (изначально с помощью jQuery).

0 голосов
/ 25 октября 2010

dataType: "html" не должно быть dataType: "json"?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...