2010-02-08 39 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