2013-10-31 123 views
0

我在我的JS执行以下内容。错误回调没有任何错误

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

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

  1. 这怎么可能?
  2. 我在哪里可以检查错误的信息(我看到状态()说:拒绝)?
+0

向函数中添加第三个参数,它应该包含错误消息 – Snowburnt

+0

@Snowburnt Nope。它说*未定义*。 –

回答

1

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

在网络层面上,请求成功(这就是为什么Firefox会给你显示一个200 OK响应),但是相同的原始策略(SOP)会触发错误并阻止JavaScript读取响应。

如果你想请求成功,或者:

  • 有请求的服务器服务于您的请求起源适当Access-Control-Allow-Origin头。 (只有当您控制目标服务器时才可能)。

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

  • 设置以代理HTTP请求和转发响应脚本:

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

    注意,这不会转发饼干,所以如果traget资源需要认证,那么认证将失败。

+0

再次染指CORS。 JSONP是唯一的解决方法吗? –

+0

@KonradViltersten你控制所请求的服务器吗? JSONP需要服务器端代码,所以如果服务器尚未实现它,则需要添加它。 (如果你有能力实现它,为什么不添加CORS头文件?)如果你不控制目标服务器,你可以使用另一个你控制的服务器(并且SOP允许*)*充当代理人。 – apsillers

+0

在目前的情况下,我没有太大的控制。而且,更糟糕的是,我无法按照建议的方式进行设计。我开始担心,我将无法使用我拥有的工具来构建我需要的东西...... –