2009-06-01 77 views
9

我有以下,但它不工作,我读了stackoverflow的地方,它的工作原理,但我似乎无法得到它的工作..它的错误...我做错了什么?将js对象作为json传递给jquery?

如果我通过这样的数据 - 它的工作原理 - 所以我知道我的服务工作

//THIS WORKS 
data: "{one : 'test',two: 'test2' }" 


// BUT SETTING UP OBJECT doesn't work.. 

var saveData = {}; 
saveData.one = "test"; 
saveData.two = "tes2"; 


$.ajax({ 
    type: "POST", 
    url: "MyService.aspx/GetDate", 
    data: saveData, 
    contentType: "application/json; charset=utf-8", 
    dataType: "json", 
    success: function(msg) { 
     alert(msg.d); 
    }, 
    error: function(msg) { 
    alert('error'); 
    } 

}); 
+0

什么错误? – cgp 2009-06-01 21:04:18

+0

正如Matt Winckler的回答所指出的那样,问题并不在于jQuery处理你给它的对象(它做了预期的事情) - 但显然.NET服务期望JSON是一个字符串,然后可以解析服务器端。在这种情况下,包含一个用于将对象串化的严格目的的库是不必要的。 – 2009-06-01 21:22:21

回答

21

我相信,代码会调用.value的或的ToString()的对象,然后通过电线。你想传递JSON。

因此,包括JavaScript库

http://www.json.org/js.html

再经过...

var saveData = {}; 
    saveData.one = "test"; 
    saveData.two = "tes2"; 


    $.ajax({ 
     type: "POST", 
     url: "MyService.aspx/GetDate", 
     data: JSON.stringify(saveData),  // NOTE CHANGE HERE 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     success: function(msg) { 
      alert(msg.d); 
     }, 
     error: function(msg) { 
     alert('error'); 
     } 

    }); 
3

this blog post,原因并不在尝试通过工作JSON对象是jQuery试图序列化它。从帖子:

而不是传递一个JSON对象通过Web服务,jQuery将自动序列化,并把它作为:

fname=dave&lname=ward 

要哪个,服务器将响应

Invalid JSON primitive: fname. 

这显然不是我们想要发生的。解决的办法是确保你传递的jQuery数据参数的字符串[...]

这就是你在做的例子中的工作。

3

我的建议是使用jquery-json plug-in,然后你可以做到这一点在你的代码:

... 
data: $.toJSON(saveData), 
...