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

标签 javascript jquery web-services webforms

我试图在 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/

相关文章:

wcf - 突然 WCF session 服务断开时的资源清理

java - 关闭 SQL 连接 Java Webservice

javascript - $http 类型错误 : Cannot read property 'get' of undefined - in a factory

jquery - 如何通过 $.get 使用图像加载器

json - Glassfish 生成 JSON 时出错

javascript - 迭代所有其他 AJAX 对象

javascript - bootstrap datetimepicker 与数据表 jquery 插件冲突

javascript - javascript 中的全局变量未按预期工作

javascript - Angular 访问 Controller 内的 cookie

javascript - 如何向 d3.xhr 调用添加全局监听器