javascript - 同步 CORS XHR 302 重定向失败,但异步工作

标签 javascript ajax google-chrome xmlhttprequest soundcloud

Firefox 似乎是唯一在执行此同步请求时不会抛出错误的浏览器,知道为什么吗?

// Make sure to have your JS console open when you run this
var url = '//api.soundcloud.com/resolve.json?url=http://soundcloud.com/matas/hobnotropic&client_id=83f67039ae0c3790030d256cb9029678';
var xhr = new XMLHttpRequest();
xhr.open('GET', url, false); // SYNCHRONOUS
xhr.onload = alert.bind(null, 'Loaded');
xhr.send(null);

执行几乎相同的异步 XMLHttpRequest 不会导致任何错误,并且请求会按预期完成:

// Make sure to have your JS console open when you run this
var url = '//api.soundcloud.com/resolve.json?url=http://soundcloud.com/matas/hobnotropic&client_id=83f67039ae0c3790030d256cb9029678';
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true); // ASYNCHRONOUS
xhr.onload = alert.bind(null, 'Loaded');
xhr.send(null);

据我所知:

  • SoundCloud API返回正确的 CORS header 。
  • SoundCloud resolve API执行到 http://api.soundcloud.com/tracks/49931.json 的 302 重定向。
  • 如果请求是异步执行的,它将成功遵循重定向并完成。
  • 如果请求是同步执行的,那么它将失败并在控制台中显示以下错误(没有 Firefox):
    • Chrome:“NetworkError:发生网络错误。”
    • Opera:“NetworkError:发生网络错误。”
    • Safari:“XMLHttpRequest 异常 101:同步请求中发生网络错误。”

谁能解释为什么同步请求失败?以及为什么它会因如此奇怪的错误而失败,尤其是因为异步执行时相同的请求有效?为什么该参数会有所不同?这是 Firefox 或 WebKit/Blink 人群的已知错误吗?

编辑:我有opened a new issue on Chrome's bug tracker因为还没有人能够在规范中指出任何可以正确解释这种行为的内容。当我有机会时,我可能会为 WebKit 打开一个类似的问题。

最佳答案

关于javascript - 同步 CORS XHR 302 重定向失败,但异步工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20224883/

相关文章:

html - CSS 在 Chrome 中工作,但在 IE 或 Firefox 中不工作

html - Chrome 中模糊的缩小图像

javascript - 强制 Backbone fetch 总是使用 POST

javascript - Javascript Falling Rocks 游戏中的碰撞检测

php - Symfony 2 根据选定值动态更改表单

ruby-on-rails - Rails 3.2 :remote => true, 提交后绑定(bind)

javascript - 为什么 crockford 在他的 json_parse 函数中创建这种类型的错误函数?

javascript - 有没有办法让 WebGL 在屏幕外渲染,而无需将 webgl Canvas 附加到 DOM?

javascript - 在 getJSON 中编写 ajax 调用的失败案例

javascript - Internet Explorer Javascript 语法错误