通过POST方法向PHP传递结构化数据

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); console.log(postVar)

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

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

情况2:
当我添加以下内容时:

    postVar = JSON.stringify(postVar);
    console.log(postVar);

我得到了以下内容:
{"a":"something","b":"else","arr1":[],"arr2":[[],[],[]]}
通过console.log(postVar)。

那么在这种情况下似乎就是问题所在了,对吧?


1
为什么你在这里使用 stripslashes? - James
1
你是否检查过PHP是否获取到数据?例如在PHP文件中加入print_r($_POST)。同时,检查控制台是否有任何提示。 - MDEV
请检查您的服务器是否正在运行magic_quotes,它会干扰json。 - James
请勿在帖子中使用HTML <pre>标签,而是使用普通的Markdown格式。 - epascarello
在客户端,尝试使用JSON.stringify()(如果我拼写正确的话)。而在服务器端,您可以使用json_decode() - starbeamrainbowlabs
显示剩余2条评论
2个回答

0

在添加 stripslashes 之前,您应该检查 magic_quotes 是否存在

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

我建议你关闭魔术引号...它根本不是魔法


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


希望这能帮助其他遇到同样问题的人。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接