0

我在我的 JS 中执行以下操作。

var url = ...;
$.ajax({
  url: url,
  error: function(p1, p2) { alert(p2); }
});

我收到文本错误,但是当我检查 FF 的控制台时,它列出了对指定为200 OK的地址的调用。看来我确实得到了一个错误,因为虽然没有调用成功。

  1. 这怎么可能?
  2. 我在哪里可以查看错误消息(我看到state()被拒绝)?
4

1 回答 1

1

这是跨域请求失败的结果。

在网络级别,请求成功(这就是 Firefox 向您显示200 OK响应的原因),但同源策略 (SOP) 会触发错误并阻止 JavaScript 读取响应。

如果要使请求成功,可以:

  • 让请求的服务器为您的请求源提供适当的Access-Control-Allow-Origin标头。(这只有在您控制目标服务器时才有可能。)

  • 使用 JSONP:让服务器以脚本格式向您发送数据,并让您的客户端在<script>标签中运行它。(同样,目标服务器必须已经支持这一点。)

  • 设置您自己的服务器来代理 HTTP 请求并将响应转发到您的脚本:

    Client Ajax ==> Your server (allowed by SOP) ==> Target resource
    

    请注意,这不会转发 cookie,因此如果 traget 资源需要身份验证,则该身份验证将失败。

于 2013-10-31T14:36:20.117 回答