无法使用ajax将多维数组传递给php

时间:2012-12-16 19:11:49

标签: php jquery ajax

我试图传递的数组:

var params = [];
params['request'] = "movies";
params['param'] = [];
params['param']['sortBy'] = "title";
params['param']['sortOrder'] = "asc";

Ajax电话:

return $.ajax({
        type: "POST",
        url: "http://192.168.0.100:83/getData.php",
        cache:false,
        data: params,
        dataType:"json",
        success: function(data){
            if(data != null){
                            console.log(data);
                        }

问题是php脚本只接收$ _POST ['request'],params不存在。

如果我在ajax调用之前在控制台日志中查看params数组,我会看到:

[request: "movies", param: Array[0]]
length: 0
param: Array[0]
length: 0
sortBy: "title"
sortOrder: "asc"
__proto__: Array[0]
request: "movies"
__proto__: Array[0]

似乎问题可能是“param”参数未被传递,因为它被视为空(它不是,至少在传递给ajax调用之前),但为什么会发生这种情况我不知道。我在这里缺少什么?

2 个答案:

答案 0 :(得分:3)

您已将params声明为数组[],但使用["string"]表示法为其指定了对象属性。这导致空数组的附加属性附加到Array对象。

相反,它应该被声明为一个对象文字,另一个对象文字嵌套在里面。

var params = {
  request: "movies",
  param: {
    sortBy: "title",
    sortOrder: "asc"
  }
};

$_POST的结构应该是这样的:

Array
(
    [request] => movies
    [param] => Array
        (
            [sortBy] => title
            [sortOrder] => asc
        )

)

答案 1 :(得分:2)

您可以将数据作为JSON发送,并使用json_decode()

在php中对其进行解码
$.ajax({        
        data: { paramData: JSON.stringify( params),
       /* other ajax options*/

})

然后在php中接收它:

$params= json_decode($_POST['paramData']); 
echo $params['request']; /* should return "movies" as response*/

为不支持JSON方法的旧浏览器包含json2.js库

编辑:经过一些测试后肯定需要将params更改为object而params.param更改为object,将[]更改为{}将完成此操作:

 var params = {};
 params['request'] = "movies";
 params['param'] = {};
 params['param']['sortBy'] = "title";
 params['param']['sortOrder'] = "asc";

DEMO:http://jsfiddle.net/germk/2/