gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 00:02:10 25 4
gpt4 key购买 nike

我有以下 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。

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

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

最佳答案

jQuery .ajax 的使用看起来很可靠。您如何验证返回的数据? Firebug ? fiddler ?因为 .asmx Web 服务不会返回类似 {"FirstName":"James"} 的数据。响应看起来更像是:

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

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

为了您的成功回调,请尝试:

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

关于jquery - 如何解释从 jQuery.ajax 返回的 JSON 并使用 POST 操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/612515/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com