2013-05-09 54 views
1

我試圖從發送數組JavaScriptPHP與Jquery的$.post()方法。在ajax查詢中發送數組

我試過jQuery.serialize(),jQuery.serializeArray(), JSON.stringify(),他們都沒有工作。

這是我的代碼:

$.post("ajax/"+action+"_xml.php",{'array': array},function(data){console.log(data);}); 

陣列看起來像這樣:

array["type"] 
array["vars"]["name"] 
array["vars"]["email"] 

陣列[ 「瓦爾」]有2層以上的元件。

我的php $_POST變量的結果是一個空數組(長度爲0)。

回答

1

我建議上的數據,您通過以下結構:

的Javascript:

var DTO = { 
    type: [1,2,3], 
    vars: { 
     name: 'foo', 
     email: '[email protected]' 
    } 
}; 

var stringifiedData = JSON.stringify(DTO); 

// will result in: 
//{"type":[1,2,3],"vars":{"name":"foo","email":"[email protected]"}} 

$.post("ajax/"+action+"_xml.php",{'DTO': stringifiedData },function(data){ 
    console.log(data); 
}); 

PHP:

header('Cache-Control: no-cache, must-revalidate'); 
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); 
header('Content-type: application/json'); 

$DTO = $_POST['DTO']; 

if(isset($DTO)) 
{ 
    $assocResult = json_decode($DTO, true); 
    var_dump($assocResult); //do stuff with $assocResult here 
} 

傳遞true作爲第二個參數json_decode將使它返回一個關聯聯合數組。

http://php.net/manual/en/function.json-decode.php

+0

謝謝,我喜歡你。我建立了一個對象而不是一個數組,並且我使用了'JSON.stringify',並在我的php中使用了'json_decode'。一切都很完美,坦克很棒。 – Wanceslas 2013-05-09 20:58:18

+0

@Wanceslas沒問題,很高興聽到它爲你工作。 – Johan 2013-05-09 20:59:27

+0

+1樣品和兩側的細節。 。 。如果它解釋了爲什麼之前的方法不起作用,那將是完美的。 。 。 – ernie 2013-05-09 21:03:39

0

我不知道你是否能像發佈一個數組。

拆分它應該只是罰款:

$.post("ajax/"+action+"_xml.php",{'type': array["type"], 'name' : array["vars"]["name"],...},function(data){console.log(data);}); 
+0

考慮到數十個密鑰的陣列,這種方法可能不是最好的。 (可能性) – 2013-05-09 20:42:28

0

你需要把你的JavaScript數組轉換爲字符串,因爲這是所有post()方法接受。大多數人通過converting their array to JSON來做到這一點。

+0

爲什麼downvote? – ernie 2013-05-09 20:43:32

+0

由於您的回答沒有任何問題,因此您可以點擊此處取消;) – Johan 2013-05-09 20:54:29