使用jQuery AJAX将数组作为参数传递?

我有以下格式的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) 

为了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" ) 

可以通过post命令发送任何JSON对象……甚至可以发送到MVC控制器。 困难的部分是接收数据……您可能需要在服务器上手动反序列化(在控制器中或使用JSONfilter)。

本文(链接)几乎为您提供了有关将复杂对象反序列化为MVC控制器方法的参数所需的一切信息。 阅读。 它工作得很好。

首先,我认为你正在混合使用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 &parameter2=value2 &parameter3=1 &parameter3=2 &parameter3=3 &parameter4=%5Bobject+Object%5D 

对于PHP来回传递复杂对象,我建议使用JSON stringify方法序列化JavaScript对象,并使用json_decode在后端对其进行反序列化。

此外,您似乎正在使用一些MVC框架。 如果它是CodeIgniter并且您在使用GET时遇到问题,请考虑使用此postJSON帮助程序方法:

 $.postJSON = function(url, data, callback) { $.post(url, data, callback, "json"); }; 

我以前一直在这条路上。 使用逗号(或任何最适合您的方案的角色)加入您的数组并将其作为单个参数发送…

 var arr = [5, "x", 25]; var parms = { parameter1: "value1", parameter2: arr.join(","); } 

在服务器端,你的“parameter2”post变量看起来像5,x,25

这是电线两侧的简单解决方案。