2009-10-05 66 views
6

我有以下格式的AJAX调用:将数组作为参数传递给jQuery 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

你试过做到了吗? – 2009-10-05 20:38:16

+0

是的,我只能访问数组的最后一个参数在PHP脚本,引用它,例如,$ _ GET [“参数3”] – 2009-10-05 20:53:40

回答

8

您可能需要命名您的变量作为 “参数3 []” 对PHP的缘故:

$.get('/controller/method/', 
    { 
    "parameter1": "value1", 
    "parameter2": "value2", 
    "parameter3[]": ["a","b","c"] 
    }, 
    function(data) { 
    if (data) { 
    } 
    else { 
    } 
}); 

$ _GET [ “参数3”]将在PHP出现

Array 
(
    [0] => "a" 
    [1] => "b" 
    [2] => "c" 
) 
+0

不错!工作得很好。现在我不必担心我的参数值是否包含分隔符值(例如。逗号)。有一点奇怪,必须引用变量名称。 – 2009-10-05 23:04:39

+0

很好,说短写自己的查询字符串解串器,这是处理多值形式输入,如复选框,并选择标准 - 和only-方式。 PHPland确实是一个不可思议的地方。 – codehead 2009-10-06 06:37:22

+0

我甚至使用这个方法来定期传递数组 – Manatax 2013-02-09 05:43:18

0

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

This article (link)几乎为您提供了有关反序列化复杂对象的一切信息。成一个MVC控制器方法的参数读取它,它工作得很好

+0

唉唉!你现在只是添加了你在PHP中这样做,我的链接不会帮助你。对于PHP,您需要拦截将作为JSON对象的请求消息,然后将其反序列化为对象。 – Evildonald 2009-10-05 20:58:04

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并不喜欢嵌套对象,它创建了一个qu ERY字符串是这样的:

foo.htm?parameter1=value1 
    &parameter2=value2 
    &parameter3=1 
    &parameter3=2 
    &parameter3=3 
    &parameter4=%5Bobject+Object%5D 

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

而且,看来你使用的是MVC框架。如果是笨和您遇到的GET麻烦,可以考虑使用这种postJSON helper方法:

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

我一直沿着这条道路前。加入你的阵列用逗号(或任何字符将工作最适合您的方案),并把它作为一个参数...

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

和服务器端,你的“参数2”后变的样子5,x,25

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

+0

使用join()方法的Josh Stodola解决方案完美运行。谢谢! – pdelco 2011-05-11 13:36:18