2011-08-04 50 views
16

發送JavaScript對象到PHP我學習阿賈克斯的故障,並已碰了壁:通過Ajax

我有一個數組(如果它的事項,陣列存儲號碼的ID基於什麼檢查框用戶檢查)這是用Javascript編寫的。

我有一個函數,當用戶點擊'保存'按鈕時被調用。功能如下:

function createAmenities() { 
    if (window.XMLHttpRequest) { 
     //code for IE7+, Firefox, Chrome and Opera 
     xmlhttp = new XMLHttpRequest(); 
    } 
    else { 
     //code for IE6, IE5 
     xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); 
    } 

    xmlhttp.onreadystatechange = function() { 
     if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
      document.getElementById('message').innerHTML = xmlhttp.responseText; 
     } 
    } 

    var url = "create_amenities.php"; 

    xmlhttp.open("GET", url, true); 

    xmlhttp.send(); 

} 

我的問題是: 我可以把什麼在這個函數拉數組的PHP腳本,我試圖調用(「create_amenities.php」)?

此外,我應該嘗試使用JSON?如果是這樣,我怎麼能通過Ajax發送一個JSON對象?

在此先感謝。

回答

44

如果你的數組有多個1維或者是一個關聯數組,你應該使用JSON。

Json將一個完整的數組結構轉換爲一個字符串。 這個字符串可以很容易地發送到您的PHP應用程序,並轉回到一個PHP數組。在JSON

的更多信息:http://www.json.org/js.html

var my_array = { ... }; 
var json = JSON.stringify(my_array); 

在PHP中可以使用json_decode字符串解碼:

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

var_dump(json_decode($json)); 
+3

這是一個乾淨的解決方案(+1)。只是爲了完整性:數組也可以是'my_array = [...]',在'json = JSON.stringify(my_array)'後它被髮送爲'url =「create_amenities.php?json」;' – Jiri

+0

+1:簡潔,易讀的代碼工作得很好。 – FreeAsInBeer

+0

你能幫我理解爲什麼我在javascript中創建的數組轉換爲對象,當我通過請求參數在PHP中獲取它時?順便說一句,你的答案拯救了我的一天。謝謝! – Simer

1

遍歷數組並每次將encodeURIComponent('keyname[]') + '=' + encodeURIComponent(theArray[i]) + '&'附加到查詢字符串。

此外,我應該嘗試使用JSON嗎?

你可以,但這意味着解碼JSON在另一端,而不是讓正常的表單處理照顧它。

如果是這樣,我怎麼能通過ajax發送一個JSON對象?

還有no such thing as a JSON object。 JSON採用字符串形式,您可以在查詢字符串中包含字符串(請記住encodeURIComponent)。

-2

首先,是的,不要手工編寫AJAX 。你不可能在所有瀏覽器上生成真正可行的東西。

實際問題的最佳方法是將您的數組作爲cgi參數提交。

如果複選框是一種形式,你需要很少做 - 只需提交表單,

<form><input type=checkbox ...><input type=checkbox ...> 
$.post("test.php", $("#testform").serialize()); 

關於如何做到這一點的詳細信息,請參閱http://api.jquery.com/jQuery.post/。 您的列表將以PHP中的數組形式出現。

或用很簡單的東西,以增加自己的例子,這樣做:

url = url + '?checkboxes=' + checkboxes.join(','); 

現在只是內部分裂PHP它和你有它回來了!