2009-10-05 65 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