我有一些使用ajax发出ajax请求的javascript。预检OPTIONS调用此请求失败。我想向用户显示一些关于调用及其状态代码的调试信息 - 如何从错误回调中的jqXhr对象获取此信息?
$.ajax
url: url
headers: headers
...
error: (jqXhr, status) =>
# how can I get info about OPTIONS call here?
答案 0 :(得分:3)
目前,这根本不可能。
在spec和浏览器实施中,无论原因的飞行前请求失败时,CORS严重缺乏错误信息。来自HTML5 Rocks的相关摘录:
如果CORS请求中存在错误,浏览器将触发客户端的
onerror
事件处理程序。它还会将以下错误打印到控制台日志中:
XMLHttpRequest cannot load http://api.alice.com. Origin http://api.bob.com is not allowed by Access-Control-Allow-Origin
。浏览器没有提供有关错误发生原因的大量详细信息,它只会告诉您出现问题。
......接着说(在known issues)下:
没有向
onerror
处理程序提供错误信息 - 当触发onerror处理程序时,状态代码为0,并且没有statusText。这可能是设计使然,但在尝试调试CORS请求失败的原因时可能会造成混淆。
事实上,您发现的所有内容都是jqXHR statusText
属性为空,status
代码为0
,getAllResponseHeaders()
将返回空字符串。
只是要清楚:从基础XMLHttpRequest
对象中获取数据是一个问题。并不是jQuery屏蔽信息或者不提供信息;在这种情况下,根本不可能(目前)从XmlHttpRequest
对象中获取错误数据。