【发布时间】:2011-04-07 04:42:53
【问题描述】:
我完全糊涂了。
- jquery v1.5.2 Firefox 3.6.16 ASMX
- 列表项
- 用VS 2010,.Net Framework 3.5编写的Web服务
- 托管在本地计算机的 VS 2010 Development Web 服务器上或开启
- 在 Windows Web Server 2008 R2 上运行 IIS 7.5 的主 Web 服务器
本地开发网络服务器和主要生产网络服务器都表现出相同的行为
- 从浏览器调用 Web 服务时运行良好。
- 我得到了方法列表。
- 我可以点击方法名
- 我可以点击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 服务,请取消注释以下行。 '_
_
_ _
公共课服务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 页面不应要求这样做。
我做错了什么?
非常感谢
最好的祝福
耶
【问题讨论】:
-
您的服务在哪个端口上运行?如果您的服务未在与客户端应用程序相同的端口上运行,您可能会遇到跨域问题。
-
你不需要把完整的 url 只是..
url:"ndtvservices.asmx/HelloWorld"就足够了 -
njebert :感谢您抽出时间回复。当然,我的开发系统运行 asp.net 开发服务器。并且端口不断变化——这就是我在“url”中提到填充localhost:1272 的原因。 Web 服务和 jQuery 在我的本地机器或同一台服务器上运行。在任何情况下,我的开发系统和我的生产网络服务器都在同一个公司 Windows 域上 - 所以,希望不存在跨域问题。
-
TheSuperTramp:感谢您的建议:在这种情况下,我将如何指定端口号?网址:“ndtvservices.asmx:1272/HelloWorld”?我会尝试并报告。感谢您抽出时间。谢谢
标签: jquery asmx webmethod responsetext