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