从 $.post() 获取 JSON 对象结果
Getting JSON Object Result from $.post()
我正在尝试通过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() 的最后一个参数)是文档类型,不包含我期望的成功和消息成员。
什么是神奇的词,这样我才能拿回我期待的对象?
编辑
仔细检查,我可以找到我正在寻找的数据,如下所示:
result.childNodes[0].childNodes[0].data: "{"成功":true,"消息":"服务器已成功更新!"}"
您看到以 JSON 结尾的节点的奇怪结构的原因是,您没有调用该服务来将 JSON 从 ASMX 脚本服务中引出,然后返回 JSON 字符串。因此,最终结果是返回一个包含该 JSON 字符串的单个值的 XML 文档。
您现在遇到的两个特定问题是,您正在手动对返回值进行 JSON 序列化,并且您没有使用 application/json
的内容类型调用服务(.NET 需要它才能切换到 JSON 序列化响应)。
解决这些问题后,由于数据参数是 URL 编码而不是有效的 JSON 字符串,您还会遇到"无效的 JSON 原语"错误。
要使其正常工作,请在服务器端执行以下操作:
[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 开发人员的通信部分中的帖子。当您继续沿着这条路走下去时,您会发现很多信息很有帮助。
注意:helmus 留下的链接是相关的。在2.0和现在之间,在使用ASMX ScriptServices通过JSON进行通信方面,没有任何根本性的变化。如果你对 .NET 中解决此问题的真正尖端方法感兴趣,ASP.NET Web API 是要走的路。
将此属性添加到 ProcessItem 方法中:
[ScriptMethod(ResponseFormat = ResponseFormat.Json)]
在$.post
调用中更明确。
$.ajax({
type:'post',
url:'UpdateServer.asmx/ProcessItem',
data: {'itemId':$(this).text()}
}).done(function (result) {
alert(result);
});
- jQuery匹配JSON对象的部分文本
- 如何在Javascript中将JSon对象转换为数组
- 我可以在json对象中添加一个函数吗
- 使用JS将数组转换为json对象
- 如何为json对象中的段发送array[]
- 将JSON对象传递给angular指令
- 更改JSON对象的结构
- 访问JSON对象内部的数组元素
- 在ejs-partial中对JSON对象进行迭代
- 遍历 JSON 对象并检查 URL 是否以某个值结尾
- 访问嵌套JSON对象的键,其中键是动态的
- json对象中缺少对象循环
- 发送json对象或使用express路由呈现视图
- 在play2框架中向json对象添加下拉列表项
- 元素名称上带有短划线 (-) 字符的 Json 对象
- autocomplete不接受源的json对象
- 如何在javascript中创建动态json对象
- 在使用客户端脚本时拾取JSON对象
- 如何通过json对象数组为嵌套对象赋值
- 构造JSON对象