我正在尝试这个我见过的新方法 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_解码.
尝试

$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 作为第 3 方库或使用 http://api.jquery.com/serialize/ 反而。

其他提示

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

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

在OP可能实际上仍在使用serializeArray(),而不是仅仅序列化()通过进行以下改变:

//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

其可以通过使用序列化阵列和json_decode()

// js
var dats = JSON.stringify($(this).serializeArray());
data: { values : dats } // ajax call

//PHP
 $value =  (json_decode(stripslashes($_REQUEST['values']), true));

的值被接收为一个阵列

各值可以使用$值进行检索[0] [ '值']每个HTML组件名称被给定为$值[0] [ '名称']

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 ) ) 

我有一个非常类似的情况这一点,我相信,泰W具有正确的答案。我包括我的代码示例,以防万一有足够的差异改变的结果,但它好像你可以使用贴值,你通常会在PHP。

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

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

这是一个非常简单的例子,但我认为最关键的一点是,你不希望使用json_decode()方法,因为它可能会产生不必要的输出。

的JavaScript并不改变这些值才能发布,做它的方式吗?你不应该能够经由PHP通过$_POST['name_of_input_goes_here']访问值照常

编辑:你总是可以转储$ _ POST内容看你从JavaScript的形式提交使用print_r($_POST)接受什么。这将使你对你需要在PHP做访问,你需要的数据什么了。

可以使用此功能在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;
    }
?>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top