从jQuery调用ASMX WebMethod - responseText是空白的xhr.status =“错误”

我完全陷入了困境。 jquery v1.5.2 Firefox 3.6.16 ASMX 项目清单 用VS 2010,.Net Framework 3.5编写的Web服务 托管在本地计算机的VS 2010开发Web服务器上或ON 在Windows Web Server 2008 R2上运行IIS 7.5的主Web服务器 本地开发Web服务器和主生产Web服务器都表现出相同的行为 从浏览器调用Web服务时效果很好。 我得到了方法列表。 我可以点击方法名称 我可以单击Invoke按钮,调用该方法并返回结果 当我的jquery页面调用相同的Web方法时,将使用以下状态字段触发错误函数 readyState:0 responseText:“” 状态:0 statusText:“错误” 错误:function() 我的jQuery部分
        <script type="text/javascript">
              $(document).ready(function() {
                    $.ajax({
                        type: 'POST',
                        url: 'http://localhost:1272/ndtvservices.asmx/HelloWorld',
                        data: '{}',
                        contentType: 'application/json; charset=utf-8',
                        dataType: 'json',
                        success: function(msg) {
                                 alert("success " + msg) ;
                        },
                        error: function(xhr, status, error) {
                                 var err = eval("(" + xhr.responseText + ")");
                                 alert(err.Message) ;
                        }
                    });
               });
        </script>
我的网络方法 Imports System.Web.Services Imports System.Web.Services.Protocols 导入System.ComponentModel Imports System.Web.Script.Services 导入System.Web.Script.Serialization '要允许使用ASP.NET AJAX从脚本调用此Web服务,请取消注释以下行。 '_  _  _  _ 公共舱服务1 继承System.Web.Services.WebService
'<ScriptMethod(ResponseFormat:=ResponseFormat.Json, UseHttpGet:=False, XmlSerializeString:=False)> _
<WebMethod()> _
Public Function HelloWorld() As String
    Dim js As New JavaScriptSerializer
    Dim s As String = "Hello World"
    Dim sReturn As String = js.Serialize(s)
    Return sReturn
End Function
结束班 system.web下的我的web配置有我在某处读取的这些条目
  <webServices>
    <protocols>
      <add name="HttpGet"></add>
      <add name="HttpPost"></add>
    </protocols>
  </webServices>
 _ 我已尝试使用上述声明进行评论和取消注释。 据我所知,对于调用此方法的非asp.net ajax页面,这不应该是必需的。 我究竟做错了什么? 谢谢一堆 最好的祝愿 艾耶     
已邀请:
您不应该手动JSON序列化服务方法中的响应。 ASP.NET已经为您自动完成了这项工作。所有你需要的是:
<WebMethod()> _
Public Function HelloWorld() As String
  Return "Hello World"
End Function
并确保您的服务使用ScriptService属性进行修饰(我的VB.NET非常生疏,所以这可能会有点偏差):
<ScriptService()> _
Public Class ndtvservices Inherits WebSerivce
另外,我会避免在$ .ajax()的url参数中使用完全限定的URI。这应该是你所需要的:
url: '/ndtvservices.asmx/HelloWorld'
最后,如果您使用的是ASP.NET 3.5或更高版本,ASP.NET会将JSON响应包装在“.d”对象中,以防止出现与JSON数组相关的特定安全问题。你想在成功回调中“点”到那个包装器对象,如下所示:
success: function(msg) {
  alert("success " + msg.d) ;
}
    

要回复问题请先登录注册