Я пробую этот новый метод, который я видел serializeArray()
.
//with ajax
var data = $("#form :input").serializeArray();
post_var = {'action': 'process', 'data': data };
$.ajax({.....etc
Таким образом, я получаю этих пар значения ключа, но как я получаю доступ к ним с PHP?
Я думал, что должен был сделать это, но это не будет работать:
// in PHP script
$data = json_decode($_POST['data'], true);
var_dump($data);// will return NULL?
Спасибо, Richard
Как предположил Gumbo, вы, вероятно, не обрабатываете возвращаемое значение json_decode.
Попробуйте
$data = json_decode($_POST['data'], true);
var_dump($data);
Если $data
не содержит ожидаемых данных, то var_dump($_POST);
чтобы посмотреть, что Ajax вызов отправил в ваш скрипт. Возможно, вы пытаетесь получить доступ к JSON с неправильного ключа.
EDIT
На самом деле, вы должны убедиться, что вы действительно отправляете JSON в первую очередь :)
.
В документации jQuery для состояния serialize Метод .serializeArray() создает JavaScript массив объектов, готовый к кодированию в виде строки JSON. Готовый к кодированию массив не является JSON. Очевидно, в jQuery нет функции Object2JSON, поэтому либо используйте https://github.com/douglascrockford/JSON-js/blob/master/json2.js как стороннюю либу, либо используйте http://api.jquery.com/serialize/ вместо нее.
Возвращаемая структура JSON не является строкой. Вы должны использовать плагин или стороннюю библиотеку для ее "структуризации". Смотрите здесь:
http://www.tutorialspoint.com/jquery/ajax-serializearray.htm
javascript не меняет способ размещения значений, не так ли? Разве вы не должны иметь доступ к значениям через PHP, как обычно, через $_POST['name_of_input_goes_here']
edit: вы всегда можете выгрузить содержимое $_POST, чтобы увидеть, что вы получаете от отправки формы javascript, используя print_r($_POST)
. Это даст вам некоторое представление о том, что нужно сделать в PHP, чтобы получить доступ к нужным вам данным.