【问题标题】:Chrome falsely accusing me of cross origin requestChrome 错误地指责我的跨源请求
【发布时间】:2016-02-17 19:04:01
【问题描述】:

我在使用 chrome 时遇到问题,告诉我它无法加载本地 JSON,因为它是跨源请求。昨天,这对 chrome 来说不是问题。现在这个网站的所有 49 个以前的版本,不仅仅是当前的我已经改变了一些东西,给出这个错误。以前,它们都加载正常。最新和所有以前的版本在 safari 和 firefox 上运行良好。

唯一改变的是昨天我制作了一个新版本的网页,该网页从服务器运行并从该服务器位置加载数据。最初,我忘记将 json 加载位置更改为该服务器。一旦我这样做了,它工作得很好。此后,我将 JSON 位置更改回我的计算机,一切都在我的计算机上运行。该网站的所有先前版本均未更改,但它们受到相同错误的影响。

我唯一能想到的是 chrome 以某种方式记得我曾经从服务器加载并错误地认为 index.html 文件或 json 文件正在服务器上运行或应该运行? 我删除了 chrome 的缓存,但这并没有什么影响。

有谁知道 chrome 诬告我试图使用跨域资源会发生什么?

这是我得到的错误:

XMLHttpRequest cannot load file:///Users/justingosses/Desktop/Test2_localData/data/UpdatedBudget_201602_3noDash.json?_=1455733288536. Cross origin requests are only supported for protocol schemes: http, data, chrome, chrome-extension, https, chrome-extension-resource.

这是我加载 json 的 javascript 代码:

function load__json() {
    $.ajax({
      // url: 'data/UpdatedBudget_201602_3noDash.json',
      url: 'data/UpdatedBudget_201602_3noDash.json',
      dataType: 'json',
      // contentType: "application/json; charset=utf-8",
      type: 'get',
      cache: false,
      success: function(data) {
        console.log("here is the raw json dataa"+data);
        data__json = data;
      },
      error: function() {
        alert("error");
      },
      async: false
    });
  };

load__json();

【问题讨论】:

  • 它看起来像您正在运行的本地主机,并且正在尝试访问文件系统中的文件,而不是访问生产服务器上的文件

标签: javascript jquery json google-chrome caching


【解决方案1】:

错误看起来很明显:

跨源请求仅支持以下协议方案:http、data、chrome、chrome-extension、https、chrome-extension-resource。

您正在尝试使用 file:// 协议从文件系统加载 JSON,Chrome 告诉您该协议不受支持。

我唯一能想到的是 chrome 以某种方式记住我曾经从服务器加载

它在之前工作,因为您是从服务器加载的(我假设它使用的是 Chrome 告诉您它支持的 http:// 协议)。

【讨论】:

  • 抱歉,我可能不清楚问题的细节。我现在尝试使用的代码以前可以使用。它是在 google chrome 上以相同方式打开的相同文件位置中的相同代码。 file:/// 协议以前工作得很好。不仅如此,服务器上的网站(使用 http:// 协议)也给了我同样的错误。昨天,它没有给我那个错误。该代码也没有被触及。我假设它必须是与浏览器有关的更改,因为代码没有更改。
  • @JustinGosses 抱歉,我不太确定我是否理解。我不确定它为什么昨天不起作用,但如果您能提供更多代码或见解,我可以尝试进行更多调查。
  • 我想通了。它以前有效,因为几周前对浏览器安全参数进行了更改,以允许本地访问文件而无需跨浏览器。我已经忘记了!最近重新启动计算机显然导致这些更改被丢弃。因此,当安全恢复默认设置时,事情突然停止工作。
  • 选项 1@github.com/mrdoob/three.js/wiki/How-to-run-things-locally。是以前用于更改默认浏览器参数的内容。感谢您的帮助约翰和@Quentin
【解决方案2】:

在 Chrome 中,所有对本地文件的请求都被视为跨域请求。

如果您想使用 XMLHttpRequest 获取数据,请使用 HTTP 服务器。

【讨论】:

    猜你喜欢
    • 2017-01-06
    • 2019-12-03
    • 2022-01-11
    • 2013-05-23
    • 2018-01-03
    • 2021-08-19
    • 2019-01-09
    • 2014-09-08
    • 2017-12-19
    相关资源
    最近更新 更多