无法从 jQuery 使用 ASP.NET Web 服务

Posted

技术标签:

【中文标题】无法从 jQuery 使用 ASP.NET Web 服务【英文标题】:Can't consume ASP.NET Web Service from jQuery 【发布时间】:2010-12-29 21:30:51 【问题描述】:

这是一个有趣的问题:

我有一些看起来像这样的 jQuery:

$(document).ready(function() 
  $.ajax(
    type: "POST",
    url: "http://localhost:63056/Service1.asmx/PrintOrderRecieptXml",
    data: 
      "CouponCode": "TESTCODE",
      "Subtotal": 14.2600,
      "ShippingTotal": 7.5000,
      "TaxTotal": 0.0000,
      "GrandTotal": 21.7600,
      "OrderItemCollection": [
        "Total": 14.2600,
        "Qty": 250
      ]
    ,
    dataType: "json",
    contentType: "application/json",
    error: function(xhr, msg) 
      alert(xhr.statusText);
    
  );
);

现在,我遇到的问题是它正在发送请求,但 Web 服务没有正确处理它。在 IE 中,我收到一个带有“内部服务器错误”的警告框,而在 FireFox 中,我收到一个里面没有任何内容的警告框。

奇怪的是,当我使用 IE 时,我的事件日志中没有出现错误事件,但是使用 firefox 我得到了(弄清楚为什么会这样):

“异常消息:无法识别请求格式,因为 URL 意外以 '/PrintOrderRecieptXml 结尾”

我浏览了一些,发现有时您必须添加:

<webServices>
  <protocols>
    <add name="HttpGet"/>
    <add name="HttpPost" />
    <add name="HttpPostLocalhost"/>

  </protocols>
</webServices>

到您的 Web.Config,我这样做了,但没有帮助。有趣的是,Web 服务可以与 SOAP 或发送查询字符串一起正常工作,但不能与 JSON 一起工作。

有什么想法吗?

【问题讨论】:

【参考方案1】:

您需要将您的输入作为 JSON 字符串而不是对象提供给 data 属性:

$(document).ready(function() 
  $.ajax(
    type: "POST",
    url: "http://localhost:63056/Service1.asmx/PrintOrderRecieptXml",
    data: '"CouponCode":"TESTCODE","Subtotal":14.2600,"ShippingTotal":7.5000,"TaxTotal":0.0000,"GrandTotal":21.7600,"OrderItemCollection":["Total":14.2600,"Qty":250]',
    dataType: "json",
    contentType: "application/json",
    error: function(xhr, msg) 
      alert(xhr.statusText);
    
  );
);

Using jQuery to Consume ASP.NET JSON Web Services 很好地解释了与 ASP.Net Web 服务对话时的要求。

【讨论】:

这似乎是正确的道路。但是,在Firefox中仍然不起作用。在 IE 中运行良好。 现在如何在 Firefox 中失败?您在服务器上看到请求了吗? ASP.Net 是否正确处理了请求?它是否击中了您的 error 处理程序客户端? 我也有同样的问题,响应返回到 ajax 调用的成功函数,但响应对象本身在 Firefox 中始终为空。【参考方案2】:

Douglas 是正确的 - 您需要将数据格式化为字符串。请务必阅读他链接到您的博客上的所有帖子。 Encosia 是 Ajax 和 Asp.Net 的绝佳资源。

【讨论】:

【参考方案3】:

asp.net webservices 不能正常返回json。看看这里: JSON WebService in ASP.NET

【讨论】:

以上是关于无法从 jQuery 使用 ASP.NET Web 服务的主要内容,如果未能解决你的问题,请参考以下文章

使用 Jquery AJAX 从 ASP.NET Web 服务器获取对象

如何使用 jQuery Ajax 调用从 ASP.NET Web Api 下载 CSV 文件

使用 jquery ajax 从 asp.net 网页表单页面调用 web api url

如何使用 JavaScript/jQuery 从 ASP.NET Web 窗体的 GridView 内部同时上传多个文件?

如何使用 jQuery 调用 ASP.NET Web 服务?

ASP.NET - 使用 jQuery 实现基于 JSON 的 Web 服务的正确方法是啥?