有没有办法从ajax预检请求中获取调试信息?

时间:2014-07-22 13:55:22

标签: javascript jquery ajax cors

我有一些使用ajax发出ajax请求的javascript。预检OPTIONS调用此请求失败。我想向用户显示一些关于调用及其状态代码的调试信息 - 如何从错误回调中的jqXhr对象获取此信息?

$.ajax
  url: url
  headers: headers
  ...
  error: (jqXhr, status) =>
    # how can I get info about OPTIONS call here?

1 个答案:

答案 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代码为0getAllResponseHeaders()将返回空字符串。

只是要清楚:从基础XMLHttpRequest对象中获取数据是一个问题。并不是jQuery屏蔽信息或者不提供信息;在这种情况下,根本不可能(目前)从XmlHttpRequest对象中获取错误数据。