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

时间:2009-10-05 20:36:31

标签: 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)

4 个答案:

答案 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
   &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");
};

答案 3 :(得分:0)

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

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

在服务器端,您的“parameter2”帖子变量看起来像5,x,25

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