6

我正在尝试我见过的这种新方法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?

谢谢,理查德

4

7 回答 7

6

就像 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/序列化/代替。

于 2010-02-10T15:05:56.997 回答
6

通过进行以下更改,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
于 2013-03-18T19:05:37.800 回答
5

它可以通过使用序列化数组和 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 ) ) 
于 2015-04-28T07:35:33.017 回答
4

返回的 JSON 结构不是字符串。您必须使用插件或第三方库来“字符串化”它。有关更多信息,请参见:

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

于 2010-02-10T15:03:51.870 回答
1

我的情况与此非常相似,我相信 Ty W 有正确的答案。我将包含我的代码示例,以防万一有足够的差异来更改结果,但似乎您可以像通常在 php.ini 中一样使用发布的值。

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

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

这是一个非常简化的示例,但我认为关键是您不想使用该json_decode()方法,因为它可能会产生不需要的输出。

于 2014-10-02T03:26:44.713 回答
0

javascript不会改变发布值的方式吗?你不应该像往常一样通过 PHP 访问这些值吗?$_POST['name_of_input_goes_here']

编辑:您可以随时转储 $_POST 的内容,以查看使用print_r($_POST). 这将使您了解在 PHP 中需要做什么才能访问所需的数据。

于 2010-02-10T14:59:22.020 回答
-1

您可以在 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;
    }
?>
于 2017-08-24T21:18:14.243 回答