将js对象作为json传递给jquery?

时间:2009-06-01 21:00:25

标签: javascript jquery ajax json object

我有以下但是它不起作用,我在stackoverflow上的某处读到它的工作原理就像这样但我似乎无法让它工作..它的错误......我做错了什么?

如果我确实传递了这样的数据 - 它有效 - 所以我知道我的服务正在运作

//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');
    }

});

3 个答案:

答案 0 :(得分:25)

我相信代码会在你的对象上调用.value或.toString(),然后传递一下。你想传递JSON。

所以,包括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');
        }

    });

答案 1 :(得分:4)

根据this blog post,当您尝试传递对象时它不起作用的原因是jQuery尝试序列化它。从帖子:

  

jQuery不会将该JSON对象传递给Web服务,而是自动序列化并将其发送为:

     
fname=dave&lname=ward
         

服务器将响应:

Invalid JSON primitive: fname.
  
     

这显然不是我们想要发生的事情。解决方案是确保您为数据参数[...]

传递jQuery字符串

您正在使用的示例中执行此操作。

答案 2 :(得分:3)

我的建议是使用jquery-json plug-in,然后您可以在代码中执行此操作:

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