4

假设我有以下数据:

var arr = [], arr1 = [], arr2 = [], arr3 = [], arr4 = [];
var a = 'something', b = 'else';
arr1['key1-1'] = 'value1-2';
arr1['key1-2'] = 'value1-2';
for (var i = 0; i < someCond; i++) {
    arr = [];
    arr['key2-1'] = 'value2-1';
    arr['key2-2'] = 'value2-2';
    arr2.push(arr);
}

现在我需要将它的漏洞传递给 php 脚本。

我将它打包成一个变量,如下所示:

var postVar = {
    a: a,
    b: b,
    arr1: arr1,
    arr2: arr2
};

我正在使用 jQuery,所以我尝试像这样发布它:
1)

//Works fine for a and b, not for the arrays
$.post('ajax.php', postVar, function(response){});

这:
2)

var postVar = JSON.stringify(postVar);
$.post('ajax.php', {json: postVar}, function(response){});

与 php 文件

$req = json_decode(stripslashes($_POST['json']), true);

这也行不通。

我应该如何构造/格式化我的数据以将其发送到 PHP?

谢谢

编辑:
案例 1:console.log(postVar); 控制台日志(postVar)

PHP print_r($_POST) 响应:数组 ( [a] => something [b] => else )

如您所见,php 端没有数组(对象)。

案例2:
当我添加以下内容时:

    postVar = JSON.stringify(postVar);
    控制台.log(postVar);

我 用 console.log(postVar)得到
{"a":"something","b":"else","arr1":[],"arr2":[[],[],[]]}

所以这似乎是这种情况下的问题......对吧?

4

2 回答 2

0

你应该在添加这样的stripslashes之前检查magic_quotes

if( get_magic_quotes_gpc() ) {
    $jsonString = stripslashes( $jsonString );
}
$data = json_decode( $jsonString );

我建议您应该关闭魔术引号...这根本不是魔术

于 2012-07-05T17:59:06.387 回答
0

事实证明,虽然数组对象,但 JSON.stringify 忽略了数组上的非数组属性。所以我必须将所有变量显式声明为对象。除了真正用作数组的 arr2 之外。

这是完整的代码:

var arr = {}, arr1 = {}, arr2 = [];
var a = 'something', b = 'else';
arr1['key1-1'] = 'value1-2';
arr1['key1-2'] = 'value1-2';
for (var i = 0; i < 3; i++) {
    arr = {};
    arr['key2-1'] = 'value2-1';
    arr['key2-2'] = 'value2-2';
    arr2.push(arr);
}

var postVar = {
    a: a,
    b: b,
    arr1: arr1,
    arr2: arr2
};


postVar = JSON.stringify(postVar);
$.post('ajax.php', {json: postVar}, function(response){});

在 PHP 方面:

$req = json_decode($_POST['json'], true);
print_r($req);


希望这可以帮助其他有同样问题的人。

于 2012-07-08T16:22:05.860 回答