我在我的JS执行以下内容。错误回调没有任何错误
var url = ...;
$.ajax({
url: url,
error: function(p1, p2) { alert(p2); }
});
我得到的文本错误但是当我检查FF的控制台,它会列出调用指定为200 OK地址。看来我做得到一个错误,因为成功虽然没有被调用。
- 这怎么可能?
- 我在哪里可以检查错误的信息(我看到状态()说:拒绝)?
我在我的JS执行以下内容。错误回调没有任何错误
var url = ...;
$.ajax({
url: url,
error: function(p1, p2) { alert(p2); }
});
我得到的文本错误但是当我检查FF的控制台,它会列出调用指定为200 OK地址。看来我做得到一个错误,因为成功虽然没有被调用。
这是跨域请求失败的结果。
在网络层面上,请求成功(这就是为什么Firefox会给你显示一个200 OK
响应),但是相同的原始策略(SOP)会触发错误并阻止JavaScript读取响应。
如果你想请求成功,或者:
有请求的服务器服务于您的请求起源适当Access-Control-Allow-Origin
头。 (只有当您控制目标服务器时才可能)。
使用JSONP:让服务器以脚本格式向您发送数据,让您的客户端以<script>
标记运行它。你自己的服务器(同样,目标服务器必须已经支持这一点。)
设置以代理HTTP请求和转发响应脚本:
Client Ajax ==> Your server (allowed by SOP) ==> Target resource
注意,这不会转发饼干,所以如果traget资源需要认证,那么认证将失败。
再次染指CORS。 JSONP是唯一的解决方法吗? –
@KonradViltersten你控制所请求的服务器吗? JSONP需要服务器端代码,所以如果服务器尚未实现它,则需要添加它。 (如果你有能力实现它,为什么不添加CORS头文件?)如果你不控制目标服务器,你可以使用另一个你控制的服务器(并且SOP允许*)*充当代理人。 – apsillers
在目前的情况下,我没有太大的控制。而且,更糟糕的是,我无法按照建议的方式进行设计。我开始担心,我将无法使用我拥有的工具来构建我需要的东西...... –
向函数中添加第三个参数,它应该包含错误消息 – Snowburnt
@Snowburnt Nope。它说*未定义*。 –