我在我的 JS 中执行以下操作。
var url = ...;
$.ajax({
url: url,
error: function(p1, p2) { alert(p2); }
});
我收到文本错误,但是当我检查 FF 的控制台时,它列出了对指定为200 OK的地址的调用。看来我确实得到了一个错误,因为虽然没有调用成功。
- 这怎么可能?
- 我在哪里可以查看错误消息(我看到state()说被拒绝)?
这是跨域请求失败的结果。
在网络级别,请求成功(这就是 Firefox 向您显示200 OK
响应的原因),但同源策略 (SOP) 会触发错误并阻止 JavaScript 读取响应。
如果要使请求成功,可以:
让请求的服务器为您的请求源提供适当的Access-Control-Allow-Origin
标头。(这只有在您控制目标服务器时才有可能。)
使用 JSONP:让服务器以脚本格式向您发送数据,并让您的客户端在<script>
标签中运行它。(同样,目标服务器必须已经支持这一点。)
设置您自己的服务器来代理 HTTP 请求并将响应转发到您的脚本:
Client Ajax ==> Your server (allowed by SOP) ==> Target resource
请注意,这不会转发 cookie,因此如果 traget 资源需要身份验证,则该身份验证将失败。