【问题标题】:"XMLHttpRequest cannot load" error despite apparently identical file尽管文件明显相同,但“XMLHttpRequest 无法加载”错误
【发布时间】:2015-10-31 00:58:55
【问题描述】:

好吧,这太疯狂了。

我的一个朋友正在为我测试一个 JavaScript/jQuery 库存小部件。他用来测试的 HTML 文件的内容再简单不过了。就是这两行:

<script src="http://quandl.io/widgets/js/q.js"></script>
<div name="quandl" data-values="msft revenue"></div>

对他来说,这会引发错误“[Error] XMLHttpRequest cannot load http://quandl.io/widgets/data/us-fundamentals.php?ticker=MSFT&indicator=REVENUE. Origin null is not allowed by Access-Control-Allow-Origin。”

他给我发了他的文件,我得到了同样的错误。然而,奇怪的是在 TextWrangler(一个纯文本编辑应用程序)中,他的文件中的代码如下所示:

但是,如果我将该代码粘贴到新的 TextWrangler 文档中,则代码如下所示:

并且得到这个:如果我用与另一个文件完全相同的代码保存新文件,则脚本执行没有问题。这两个文件都是从同一个地方(我的本地机器)执行的。根据我可以检查的属性,两者都是纯 HTML 文件(我看不到奇怪的样式信息)。至少可以这么说,这很奇怪。

编辑 1:这两个文件都在我运行 Safari、OSX 的本地计算机上。虽然我知道这对于 StackOverflow 来说不是 100% 洁净,但这个问题很可能是特定于文件的,所以我在这里发布了 link to the files。 (但据我所知,它们都是带有 .html 扩展名和相同内容的普通文本文件......这就是为什么这如此令人困惑)

【问题讨论】:

  • 你在这两种情况下都使用同一个浏览器吗?一些浏览器允许来自file:// URL 的 XHR,而其他浏览器(如 Chrome)则不允许。
  • @T.J.Crowder:是的。一切都一样。
  • 当脚本尝试从通过file:// URL 而不是通过Web 服务器和http:// URL 加载的页面执行ajax 调用时,通常会发生特定的Ajax 错误。跨度>
  • 好吧,我相信您已经意识到,您所描述的是……极不可能。所以某处是有区别的。什么浏览器?你能创建一个MCVE吗?
  • @jfriend00:他说他在做什么。问题是为什么结果会不一致。它应该始终有效(某些浏览器)或始终失败(Chrome 等)。

标签: jquery xmlhttprequest


【解决方案1】:

我怀疑虽然在这两种情况下您都是从“本地计算机”加载文件,但在一种情况下,您是通过在文件资源管理器中双击文件并获取file:// URL 来完成的,在另一种情况下,您可以通过http://https:// URL 从本地运行的Web 服务器进程打开文件。

这很重要,因为许多浏览器(例如 Chrome)不允许来自通过 file:// URL 加载的页面的所有 XMLHttpRequest 调用,因为 所有 来源都是“跨域”等被同源政策拒绝。因此,如果您从 file:// URL 加载文件,XHR 将失败,但如果您通过 http://https:// 加载文件,它可能会工作。

【讨论】:

  • 我想我会稍微删除一下,因为您在 cmets 中已经清楚地说明了您在两种情况下都使用file:// 的问题。我发现它非常很难相信它永远有效,如果您使用的是相同的浏览器(并且您说过您是)并且在一种情况下遇到该错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-10-17
  • 2016-02-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-10
  • 2012-07-15
相关资源
最近更新 更多