我正在尝试设置一个简单的 WCF REST 服务,我们将能够从 jquery 调用该服务。当我在浏览器中访问 URL 时,我会收到回复。当我尝试直接发送 HTTPRequest(使用 Firefox 插件 RESTClient)时,我得到了回复。这些响应在我看来是正确的,包含标头和 JSON 字符串,显然没有别的。
但是,当我通过 jquery.get() 或 jquery.post() 调用调用相同的服务时,什么也没有发生。使用 jquery.ajax() 调用显示错误回调被调用,但对我来说,提供给错误回调的数据并没有给我关于为什么这不起作用的线索。
<a id="thelink" href="javascript:void(0)">GO</a>
<script type="text/javascript">
function doAjax() {
$.ajax({type: "POST",
dataType: "json", // see note below
url: "http://localhost:54459/MySimpleService.svc/json/24",
success: function(jqXHR, textStatus) {
alert("success");
},
error: function(jqXHR, textStatus, errorThrown) {
alert("error");
}
});
}
$('#thelink').click(doAjax);
</script>
注意:对于 dataType 参数,我已经尝试了所有的“text”、“json”、“jsonp”并将参数关闭。同样,我尝试过使用 GET 和 POST(修改 Web 服务以分别响应 GET 或 POST)。
在该端点调用的方法不会做任何应该失败的壮观事情——它只是将字符串连接到一个常量并返回(只是在这一点上进行测试,它显然会在未来做更多有趣的事情)
当我单击链接时,Firefox 显示返回 200 OK。
WCF 服务正在耗尽我的 Visual Studio 2010 调试环境。它会命中放置在响应此服务方法的方法中的断点。
我尝试从本地机器(端口 80)上的文件访问上面发布的 html,并将其托管在其他地方,结果相同。这可能是一个安全问题吗?
传递给错误回调的值似乎没有太大帮助:
- jqXHR - readyState:0,状态:0,statusText:错误
- 文本状态-“错误”
- 错误抛出 - “”
那么,为什么当我在浏览器或 RESTClient 中调用 url 时,对于 GET 或 POST,我的服务似乎可以工作,但当我尝试从 jquery.ajax() 调用它时却失败了?
编辑:根据我收到的评论进行更多测试后,我尝试在与 Web 服务相同的端口上使用 javascript 托管页面,这表明成功。在我的真实世界场景中,我无法在同一个域/端口上托管客户端代码和 Web 服务。我假设这是一个安全模型问题——我在哪里允许这种访问(将域/端口列入白名单或其他)