0

我完全糊涂了。

  1. jquery v1.5.2 火狐 3.6.16 ASMX
  2. 项目清单
  3. 用 VS 2010、.Net Framework 3.5 编写的 Web 服务
  4. 托管在本地计算机的 VS 2010 开发 Web 服务器上或打开
  5. 在 Windows Web Server 2008 R2 上运行 IIS 7.5 的主 Web 服务器

本地开发 Web 服务器和主要生产 Web 服务器都表现出相同的行为

  1. 从浏览器调用 Web 服务时效果很好。
  2. 我得到了方法列表。
  3. 我可以点击方法名称
  4. 我可以单击Invoke按钮并调用方法并返回结果

当我的 jquery 页面调用相同的 web 方法时,会使用以下状态字段触发错误函数

就绪状态:0 响应文本:“”状态:0 状态文本:“错误”错误:函数()

我的 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>

我的网络方法

导入 System.Web.Services

导入 System.Web.Services.Protocols

导入 System.ComponentModel

导入 System.Web.Script.Services

导入 System.Web.Script.Serialization

' 要允许使用 ASP.NET AJAX 从脚本调用此 Web 服务,请取消注释以下行。'_

_

_ _

公共类 Service1 继承 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 配置有这些条目,因为我在某处读到 SO

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

_

我已经尝试过评论和取消评论上述声明。

据我了解,调用此方法的非 asp.net ajax 页面不需要这样做。

我究竟做错了什么?

谢谢一堆

最好的祝愿

艾尔

4

1 回答 1

2

您不应该在服务方法中手动 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) ;
}
于 2011-04-07T05:41:26.290 回答