我有以下格式的AJAX调用:
$.get('/controller/method/',
{
parameter1: value1,
parameter2: value2
},
function(data) {
if (data) {
}
else {
}
});
是否可以将数组作为参数传递?
parameter3: new Array(1, 2, 3)
parameter4: new Array('one' => 1, 'two' => 2, 'three' => 3)
答案 0 :(得分:9)
为了PHP,您可能需要将变量命名为“parameter3 []”:
$.get('/controller/method/',
{
"parameter1": "value1",
"parameter2": "value2",
"parameter3[]": ["a","b","c"]
},
function(data) {
if (data) {
}
else {
}
});
$ _ GET [“parameter3”]将在PHP中显示为
Array
(
[0] => "a"
[1] => "b"
[2] => "c"
)
答案 1 :(得分:0)
可以通过post命令发送任何JSON对象......甚至可以发送给MVC控制器。困难的部分是接收数据......您可能需要在服务器上手动反序列化(在控制器中或使用JSON过滤器。
This article (link)几乎为您提供了有关将复杂对象反序列化为MVC控制器方法的参数所需的一切信息。阅读。它运作得很好。
答案 2 :(得分:0)
首先,我认为您正在混合使用JavaScript和PHP语法。这可能就是为了演示传递数组的意图:
$.get('foo.htm',
{
parameter1: 'value1',
parameter2: 'value2',
parameter3: [1, 2, 3],
parameter4: {'one': 1, 'two': 2, 'three': 3}
},
function(data) {
alert(data);
});
奇怪的是,JQuery不喜欢嵌套对象。它创建一个像这样的查询字符串:
foo.htm?parameter1=value1
¶meter2=value2
¶meter3=1
¶meter3=2
¶meter3=3
¶meter4=%5Bobject+Object%5D
对于PHP来回传递复杂对象,我建议使用JSON stringify方法序列化JavaScript对象,并使用json_decode在后端对其进行反序列化。
此外,您似乎正在使用一些MVC框架。如果它是CodeIgniter并且您在使用GET时遇到问题,请考虑使用此postJSON帮助程序方法:
$.postJSON = function(url, data, callback) {
$.post(url, data, callback, "json");
};
答案 3 :(得分:0)
我以前一直在这条路上。使用逗号(或任何最符合您方案的角色)加入您的数组并将其作为单个参数发送...
var arr = [5, "x", 25];
var parms = {
parameter1: "value1",
parameter2: arr.join(",");
}
在服务器端,您的“parameter2”帖子变量看起来像5,x,25
这是电线两侧的简单解决方案。