Как получить значения POST из serializeArray в PHP?

Я пытаюсь использовать этот новый метод, который я видел 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? 

Спасибо, Ричард

Как предположил Gumbo, вы, вероятно, не обрабатываете возвращаемое значение json_decode .
Пытаться

 $data = json_decode($_POST['data'], true); var_dump($data); 

Если $data не содержит ожидаемых данных, то var_dump($_POST); чтобы увидеть, что вызов Ajax опубликовал в вашем скрипте. Возможно, вы пытаетесь получить доступ к JSON с неправильного ключа.

РЕДАКТИРОВАТЬ
На самом деле, вы должны убедиться, что вы действительно отправляете JSON в первую очередь 🙂
Документы jQuery для сериализации. Метод .serializeArray () создает массив объектов JavaScript, готовый к кодированию как строка JSON. Готов быть закодированным не JSON. По-видимому, в jQuery нет функции Object2JSON, поэтому либо используйте https://github.com/douglascrockford/JSON-js/blob/master/json2.js в качестве сторонней библиотеки, либо используйте http://api.jquery.com/ сериализуем / вместо этого.

Возвращенная структура JSON не является строкой. Вы должны использовать плагин или стороннюю библиотеку, чтобы «подкрепить» его. См. Дополнительную информацию:

http://www.tutorialspoint.com/jquery/ajax-serializearray.htm

OP мог бы по-прежнему использовать serializeArray () вместо простого serialize () путем внесения следующих изменений:

 //JS var data = $("#form :input").serializeArray(); data = JSON.stringify(data); post_var = {'action': 'process', 'data': data }; $.ajax({.....etc // PHP $data = json_decode(stripslashes($_POST['data']),true); print_r($data); // this will print out the post data as an associative array и //JS var data = $("#form :input").serializeArray(); data = JSON.stringify(data); post_var = {'action': 'process', 'data': data }; $.ajax({.....etc // PHP $data = json_decode(stripslashes($_POST['data']),true); print_r($data); // this will print out the post data as an associative array 

его можно использовать с помощью массива serialize и json_decode ()

 // js var dats = JSON.stringify($(this).serializeArray()); data: { values : dats } // ajax call //PHP $value = (json_decode(stripslashes($_REQUEST['values']), true)); 

значения принимаются как массив

каждое значение может быть получено с помощью $ value [0] ['value'] каждое имя компонента html указано как $ value [0] ['name']

 print_r($value) //gives the following result Array ( [0] => Array ( [name] => name [value] => Test ) [1] => Array ( [name] => exhibitor_id [value] => 36 ) [2] => Array ( [name] => email [value] => test@gmail.com ) [3] => Array ( [name] => phone [value] => 048028 ) [4] => Array ( [name] => titles [value] => Enquiry ) [5] => Array ( [name] => text [value] => test ) ) 

javascript не изменяет способ публикации значений? Если вы не можете получить доступ к значениям через PHP, как обычно, через $_POST['name_of_input_goes_here']

edit: вы всегда можете выгрузить содержимое $ _POST, чтобы узнать, что вы получаете от отправки формы javascript, используя print_r($_POST) . Это даст вам некоторое представление о том, что вам нужно сделать в PHP для доступа к необходимым вам данным.

У меня очень похожая ситуация, и я считаю, что Ty W имеет правильный ответ. Я приведу пример моего кода, на случай, если для изменения результата будет достаточно различий, но кажется, что вы можете просто использовать опубликованные значения, как обычно, в php.

 // Javascript $('#form-name').submit(function(evt){ var data = $(this).serializeArray(); $.ajax({ ...etc... // PHP echo $_POST['fieldName']; 

Это действительно упрощенный пример, но я считаю, что ключевым моментом является то, что вы не хотите использовать метод json_decode() поскольку он, вероятно, создает нежелательный вывод.

Вы можете использовать эту функцию в php для обращения к serializeArray ().

 <?php function serializeToArray($data){ foreach ($data as $d) { if( substr($d["name"], -1) == "]" ){ $d["name"] = explode("[", str_replace("]", "", $d["name"])); switch (sizeof($d["name"])) { case 2: $a[$d["name"][0]][$d["name"][1]] = $d["value"]; break; case 3: $a[$d["name"][0]][$d["name"][1]][$d["name"][2]] = $d["value"]; break; case 4: $a[$d["name"][0]][$d["name"][1]][$d["name"][2]][$d["name"][3]] = $d["value"]; break; } }else{ $a[$d["name"]] = $d["value"]; } // if } // foreach return $a; } ?>