通过post将结构化数据传递给php

通过post将结构化数据传递给php,php,javascript,post,Php,Javascript,Post,假设我有以下数据: 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'; a

假设我有以下数据:

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);
}
我正在使用jQuery,所以我试着像这样发布它:
1)

还有这个:
2)

使用php文件

$req = json_decode(stripslashes($_POST['json']), true);
这也不起作用

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

谢谢

编辑:
案例1: console.log(postVar);

PHP打印($\u POST)响应: 排列 ( [a] =>什么 [b] =>其他 )

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

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

postVar = JSON.stringify(postVar); console.log(postVar); postVar=JSON.stringify(postVar); console.log(postVar); 我得到了
{“a”:“某物”,“b”:“其他”,“arr1”:[],“arr2”:[],[],[],[]]}
使用console.log(postVar)

所以这似乎是这个案子的问题。。。正确的?

在添加像这样的斜杠之前,您应该先检查是否有神奇的引号

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

我建议你应该关掉神奇的报价。。。事实证明,它一点也不神奇,尽管数组是对象,但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是否正在获取数据?ie只是把
print\r($\u POST)
放在PHP文件中。另外,请检查控制台是否有任何提示。请检查服务器上是否正在运行magic_quotes,它将与JSON发生冲突。请注意,您的“数组”不是数组,而是对象。PHP和Javascript在这个意义上是完全不同的
arr1['key1-1']
基本上是在数组对象上设置名为
key1-1
的属性。请详细说明“不起作用”。有错误吗?您如何尝试访问
$req
?另外,请在浏览器的“开发人员工具”中检查“网络”选项卡。您需要知道发送到服务器的实际数据是什么。请勿在帖子中使用HTML标记,使用正常的标记格式。 postVar = JSON.stringify(postVar); console.log(postVar);
if( get_magic_quotes_gpc() ) {
    $jsonString = stripslashes( $jsonString );
}
$data = json_decode( $jsonString );
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){});
$req = json_decode($_POST['json'], true);
print_r($req);