Как получить значения POST из serializeArray в PHP? - PullRequest
5 голосов
/ 10 февраля 2010

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

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

Ответы [ 7 ]

7 голосов
/ 10 февраля 2010

Как и предполагал Гамбо, вы, вероятно, не обрабатываете возвращаемое значение json_decode .
Попробуйте

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

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

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

4 голосов
/ 18 марта 2013

Оператор мог бы по-прежнему использовать 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
4 голосов
/ 10 февраля 2010

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

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

3 голосов
/ 28 апреля 2015

это возможно при использовании массива 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 ) ) 
1 голос
/ 02 октября 2014

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

// Javascript
$('#form-name').submit(function(evt){
var data = $(this).serializeArray();
$.ajax({ ...etc...

// PHP
echo $_POST['fieldName'];

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

0 голосов
/ 25 августа 2017

Вы можете использовать эту функцию в 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;
    }
?>
0 голосов
/ 10 февраля 2010

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

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

...