gpt4 book ai didi

javascript - 从 $.post() 获取 JSON 对象结果

转载 作者:行者123 更新时间:2023-11-30 18:28:52 25 4
gpt4 key购买 nike

我试图在 WebForms 应用程序中通过 AJAX 调用 Web 服务。

我的脚本看起来像这样:

$.post('UpdateServer.asmx/ProcessItem',
'itemId=' + $(this).text(),
function (result) {
alert(result);
});

我的网络服务看起来像这样。

[WebService(Namespace = "http://tempuri.org/")]
[WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
[System.ComponentModel.ToolboxItem(false)]
[System.Web.Script.Services.ScriptService]
public class UpdateServer : System.Web.Services.WebService
{
[WebMethod]
public string ProcessItem(int itemId)
{
return new JavaScriptSerializer().Serialize(
new { Success = true, Message = "Here I am!" });
}
}

Web 方法按预期调用并带有预期的参数。但是,传递给我的成功函数的参数($.post() 的最后一个参数)属于文档类型,不包含我期望的 Success 和 Message 成员。

有什么神奇的词可以让我取回我期待的对象?

编辑

仔细检查后,我可以找到我要查找的数据,如下所示:

result.childNodes[0].childNodes[0].data: "{"Success":true,"Message":"Server successfully updated!"}"

最佳答案

您看到以 JSON 结尾的奇怪节点结构的原因是因为您没有调用服务 the necessary way to coax JSON out of ASMX ScriptServices然后返回一个 JSON 字符串。因此,最终结果是您将返回一个包含该 JSON 字符串的单个值的 XML 文档。

您现在遇到的两个具体问题是您是 manually JSON serializing your return value并且您没有使用 application/json 的 Content-Type 调用该服务(.NET 需要它来切换到 JSON 序列化响应)。

修复这些问题后,您还会遇到“无效的 JSON 原语”错误 due to the data parameter being URL encoded instead of a valid JSON string .

要使其正常工作,请在服务器端执行此操作:

[ScriptService]
public class UpdateServer : System.Web.Services.WebService
{
[WebMethod]
public object ProcessItem(int itemId)
{
return new { Success = true, Message = "Here I am!" };
}
}

如果需要,您还可以创建一个数据传输对象(又名 ViewModel)来返回,而不是使用匿名类型和 object

要成功从中获取原始 JSON,请在客户端执行此操作:

$.ajax({
url: 'UpdateServer.asmx/ProcessItem',
type: 'post',
contentType: 'application/json',
data: '{"itemId":' + $(this).text() + '}',
success: function(result) {
// This will be { d: { Success: true, Message: "Here I am!" } }.
console.log(result);
}
});

如果您有几分钟时间,请阅读 jQuery for the ASP.NET developer 的交流部分中的帖子。 .当您继续沿着这条路走下去时,您会发现其中的很多信息都会对您有所帮助。

注意:helmus 留下的链接是相关的。在使用 ASMX ScriptServices 通过 JSON 进行通信方面,2.0 和现在之间没有任何根本改变。如果您对在 .NET 中解决此问题的真正前沿方法感兴趣,ASP.NET Web API 是您的不二之选。

关于javascript - 从 $.post() 获取 JSON 对象结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10166091/

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