Can';t使用ajax将多维数组传递给php

Can';t使用ajax将多维数组传递给php,php,jquery,ajax,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

我试图通过的阵列:

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'],参数不存在

如果在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调用之前不是空的),但我不知道为什么会发生这种情况。我在这里遗漏了什么?

您可以将数据作为JSON发送,并使用
JSON\u decode()
在php中对其进行解码:

然后在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";

演示:

您已将
参数声明为数组
[]
,但使用
[“string”]
符号为其分配了对象属性。这导致空数组,并将附加属性附加到
数组
对象

相反,它应该声明为一个对象文字,并在其中嵌套另一个对象文字

var params = {
  request: "movies",
  param: {
    sortBy: "title",
    sortOrder: "asc"
  }
};
$\u POST
的结构应该类似于:

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

)

尝试发送json对象而不是array@kennypu我会试试的shortly@TobyAllen你到底是什么意思?@Toby他没有在上面任何地方混合js和PHP。你的
参数实际上是一个对象
{}
,而不是数组
[]
(JavaScript数组与PHP数组不同)。宣布它是这样的<代码>变量参数={}
params['param']
相同。我最初的问题是,我创建了一个带点符号的对象,并将其用于我的“param”属性。如何使用{}符号添加/附加到对象?@DominicM同样的方法-通过点符号
params.param.newThing=“newvalue”
或通过
[]
params[“param”][“newThing”]=“newvalue”
,但这通常在属性字符串作为表达式或变量的结果动态生成时使用;filters.sortBy=“title”;然后:params={request:“movies”,param:filters};但这不起作用,你能明白为什么吗?@DominicM因为
过滤器
,其本质是具有字符串属性,如
排序,在你的代码中作为对象
{}
而不是数组
[]
。您需要声明为
var filters={};filters.sortBy=“title”
Array
(
    [request] => movies
    [param] => Array
        (
            [sortBy] => title
            [sortOrder] => asc
        )

)