2012-06-22 31 views
1

我使用$.ajax到表單的值發送到一個PHP腳本。如何從JavaScript作爲多維數組的數據發送到PHP

表單輸入字段的念想通過PHP數組,但我不知道該怎麼辦使用JavaScript和jQuery相同的,以這樣的方式發送給他們,PHP能夠像陣列讀取它們。

例如一個在PHP命名foo[bar]輸入你獲得的是$_POST['foo']['bar']

目前我送這個數據,如

data:{ 
    foo_bar: $('form').find('#foo_bar').val(), 
    foo_xxx: $('form').find('#foo_xx').val() 
}, 

和手工裝配在PHP腳本的陣列。

但它開始採取了很多行代碼。 我可以以某種方式自動執行此操作,並將所有表單輸入作爲多維數組發送到PHP?

+0

我不確定我可以想象你想要做什麼。請更多代碼? – Blazemonger

+0

表單字段通常以鍵 - >值對的形式表示......因此,多維表示什麼意思?它將以何種方式呈現多維? –

回答

5

你可以使用$ .serialize();

data: { 
    d: $('form').serialize() 
} 

檢查的詳細信息在這裏:http://api.jquery.com/serialize/

它會發送回一個字符串field=value&field2=value&,你可以使用parse_str來處理它

parse_str樣本:

$foo = "t[]=1&t[]=2&b=3"; 
parse_str($foo, $bar); 
var_dump($bar); 

結果:

array(2) { 
    ["t"]=> 
    array(2) { 
    [0]=> 
    string(1) "1" 
    [1]=> 
    string(1) "2" 
    } 
    ["b"]=> 
    string(1) "3" 
} 
+0

我只是看序列化,但它似乎只支持一個級別。 – Alex

+0

你是什麼意思的一個級別? – mobius

+0

以及字符串看起來像它不支持更多的水平比一個,但我在看爆炸/爆炸。 parse_str可以將它解碼爲multidim。陣列? – Alex

4

你不需要做任何特別的事情。當此作爲查詢字符串傳遞

data: $("form").serialize() 
// foo%5Bbar%5D=&foo%5Bxxx%5D=&a%5B%5D=&a%5B%5D=&b%5B0%5D%5B1%5D%5B2%5D= 

:宣佈你的字段名稱正是你想要的方式PHP解釋它們:

<form> 
<input name="foo[bar]" id="foo_bar"> 
<input name="foo[xxx]" id="foo_xxx"> 
<input name="a[]" id="a_0"> 
<input name="a[]" id="a_1"> 
<input name="b[0][1][2]" id="b_0_1_2"> 
</form> 

jQuery.serialize將URL編碼,表單字段現在的樣子,你期望到PHP頁面:

/phpinfo.php?foo%5Bbar%5D=&foo%5Bxxx%5D=&a%5B%5D=&a%5B%5D=&b%5B0%5D%5B1%5D%5B2%5D= 

你得到:

$_GET["foo"] = Array 
(
    [bar] => 
    [xxx] => 
) 
$_GET["a"] = Array 
(
    [0] => 
    [1] => 
) 
$_GET["b"] = Array 
(
    [0] => Array 
     (
      [1] => Array 
       (
        [2] => 
       ) 
     ) 
)