当前位置:  开发笔记 > 编程语言 > 正文

如何解释从jQuery.ajax返回的JSON并使用POST操作?

如何解决《如何解释从jQuery.ajax返回的JSON并使用POST操作?》经验,为你挑选了1个好方法。

我有以下jQuery代码:

$.ajax({
    type: "POST",
    url: "Services/MyService.asmx/Select",
    dataType: "json",
    data: "{'data':'test'}",
    contentType: "application/json; charset=utf-8",
    success: function(msg){ 
                alert(msg); 
             },
    error: function(xhr){ alert(xhr.statusText);}                
});

对该方法的调用返回以下内容:

"{"FirstName":"James"}"

当我返回值时,我的警报返回完整的json字符串.如果我尝试做alert(msg.FirstName),我会"未定义".

我已经看到很多使用getJSON()方法的例子; 但是,我还没有看到一种方法将其用于POST动词.任何人都可以指出我在哪里出错了吗?根据jquery文档,返回值应该是相同的dataType(json),所以我不确定我缺少什么.

编辑:我查看了我的服务,它是匹配的示例,我发现方法签名返回一个字符串.我还确认响应类型是application/json.

EDIT2:更新了响应以包含外部引号.我也使用自定义JavaScriptConverter来执行JSON序列化.自定义转换器只获取我的对象属性(在本例中为FirstName)并将其加载到Dictionary集合中,ASP.Net AJAX Extensions v1.0可以轻松地序列化.

编辑3:调查我使用eval()的问题(它导致Expected ";"错误),我注意到json属性名称也用引号括起来.一旦我从属性名称(而不是值)中删除了引号,eval()再次工作.现在调查此问题的服务器端.



1> Crescent Fre..:

jQuery的.ajax用法看起来很稳固.你如何验证返回的数据?萤火虫?提琴手?因为.asmxwebservices不返回类似的数据{"FirstName":"James"}.回复看起来更像:

{"d":{"FirstName":"James"}}

(见http://encosia.com/2008/03/27/using-jquery-to-consume-aspnet-json-web-services/)

对于您的success回调,请尝试:

function(res) { alert(res.d.FirstName) }

编辑:看到您的更新并评论ASP.Net AJAX的v1.0:

我不是肯定v1.0如何工作来序列化您的响应,但我猜测如果您在WebService方法中进行自己的自定义JSON序列化,响应可能会再次获得JSON序列化.所以你要两次序列化.

我相信你正在使用的所有组件正在做他们应该做的事情,现在你的success回调需要手动反序列化,因为你在服务器上手动序列化:

function(res) {
    res = eval('(' + res + ')');
    alert(res.FirstName);
}

推荐阅读
可爱的天使keven_464
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有