【问题标题】:Is there a way to get debug information from an ajax preflight request?有没有办法从 ajax 预检请求中获取调试信息?
【发布时间】:2014-09-13 09:24:16
【问题描述】:

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

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

【问题讨论】:

  • 你做过console.log(jqXhr, status) 并检查过它们吗?

标签: javascript jquery ajax cors


【解决方案1】:

目前,这根本不可能。

无论是在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 对象中获取错误数据。

【讨论】:

  • 感谢您的信息。我想我得想点别的办法了!
  • @Matt 已经 6 年了。有什么改进吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-20
  • 1970-01-01
  • 1970-01-01
  • 2023-03-23
  • 2023-04-02
相关资源
最近更新 更多