完全陷入困境。
本地开发者Web服务器和主要生产Web服务器都表现出相同的行为
当我的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
导入System.Web.Script.Services
导入System.Web.Script.Serialization
'要允许使用ASP.NET AJAX从脚本调用此Web Service,请取消注释以下行。 '_
_
_ _
Public Class 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
结束班
我在web.web下的web配置包含了我在某处看到的那些条目
<webServices>
<protocols>
<add name="HttpGet"></add>
<add name="HttpPost"></add>
</protocols>
</webServices>
_
我已尝试使用上述声明进行评论和取消评论。
据我所知,对于调用此方法的非asp.net ajax页面,这不应该是必需的。
我做错了什么?
非常感谢
祝福
艾尔
答案 0 :(得分: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 wraps the JSON response in a ".d" object可以防止针对JSON数组的特定安全问题。你想在成功回调中“点”到那个包装器对象,如下所示:
success: function(msg) {
alert("success " + msg.d) ;
}