2010-02-08 38 views
2

我有一個JavaScript對象,看起來財產以後這樣的:發送一個多層次的JavaScript對象與AJAX服務器無法

var obj = { 

    "name": "username", 
    "userid": "9999", 

    "object1": { 
     "subObject1": { 
      "subArray1": [], 
      "subArray2": [] 
     }, 
     "subObject2": { 
      "subArray3": [], 
      "subArray4": [] 
     } 
    }, 
    "object2": { 
     "subObject3": { 
      "subArray5": [], 
      "subArray6": [] 
     } 
    }, 
    "array1": [], 
    "array2": [] 
}; 

我曾嘗試使用jQuery的AJAX調用是這樣的:

$.ajax({ 

    url: "test.php", 
    type: "POST", 
    dataType: "text", 
    processData: false, 
    data: obj, 
    success: function(data, status) { 

     alert("Sucsess");   
    } 
}); 

問題是PHP沒有收到任何東西。 $ _POST變量是空的。我不確定我做錯了什麼。

感謝

回答

4

首先,包括JSON2.js在頁面上(在這個頁面的底部鏈接),然後你的電話改成這樣:

$.post(
    "test.php", 
    data: JSON.stringify(obj), 
    function(data, status) { 
     alert("Sucsess");   
    }); 
+0

謝謝,這很好。 – Kyprus 2010-02-10 00:53:41

+0

@Doug Neiner我認爲「數據:」在這裏是不必要的。 – 2015-02-20 07:06:55

0

我不相信這是可能發送一個數據對象這樣。

如果您想要這樣做,您必須在發送數據然後在服務器上反序列化之前將其序列化。 HTTP有它的限制。

0

爲什麼不使用類似json2庫的方式將整個對象序列化爲JSON,然後通過單個參數發送它?我不知道PHP,但如果沒有幾十個可用的替代JSON解析器,我會驚呆了。

1

試用的jQuery 1.4.1 $.param function被完全重寫以支持這樣的事情。

+0

不幸的是我現在還不能升級到1.4.1,謝謝。 – Kyprus 2010-02-10 00:53:16

+0

您可以從1.4中獲取新的$ .param函數,並在1.3.2中使用它。在幾個項目上做了這些 – PetersenDidIt 2010-02-10 02:18:38