如何使用Fetch API跨源加载Javascript中的文本或JSON数据?

如何使用Fetch API跨源加载Javascript中的文本或JSON数据?,javascript,json,cors,javascript-objects,fetch-api,Javascript,Json,Cors,Javascript Objects,Fetch Api,首先,我在Javascript中使用了以下代码(可能是旧代码): function GetJson(url) { // 1. New Object XMLHttpRequest var xhr = new XMLHttpRequest(); // 2. Config it xhr.open('GET', url, false); // 3. Send request xhr.send(); // 4. Errors if

首先,我在Javascript中使用了以下代码(可能是旧代码):

function GetJson(url)
{
    // 1. New Object XMLHttpRequest
    var xhr = new XMLHttpRequest();

    // 2. Config it 
    xhr.open('GET', url, false);

    // 3. Send request
    xhr.send();

    // 4. Errors 
    if (xhr.status != 200) {
        // Responce error out
        return( xhr.status + ': ' + xhr.statusText ); // 404: Not Found
    } else {
        // Responce result
        return( xhr.responseText ); // responseText -- 
    }
}
这个代码解决了这个问题。在此URL出现之前:

我遇到的第一个错误是:

无法加载XMLHttpRequest . 不 “Access Control Allow Origin”标头出现在请求的服务器上 资源。因此,不允许访问源“file://”

为了不改变浏览器中的任何内容,长时间的搜索使我找到了
fetch()
函数。但我绝对无法理解如何从服务器获取JSON形式的响应,或者至少是文本形式的响应(以便进一步转换为JSON)

我试试这个:

fetch('https://bittrex.com/api/v1.1/public/getmarketsummaries/',{mode:'no-cors'})  
  .then(  
    function(response) {  
      if (response.status !== 200) {  
        console.log('Looks like there was a problem. Status Code: ' +  
          response.status);  
        return;  
      }

      // Examine the text in the response  
      response.json().then(function(data) {  
        console.log(data);  
      });  
    }  
  )  
  .catch(function(err) {  
    console.log('Fetch Error :-S', err);  
  });
我得到了答案:

看来有问题了。状态代码:0

有没有办法得到数据?这在变量中是可取的。因为我不明白fetch是如何工作的


我只需要从API中获取数据以进行进一步处理。

cors仍然存在问题。“无cors”模式无法按预期工作。

您要处理的是跨源资源共享(cors)。您请求数据的URL不允许从其他域获取数据。第二个代码段工作的原因是您将模式设置为
no cors
。调用将成功,但您的代码将无法访问任何数据。这对您的目的来说是没有用的。

尝试将模式更改为模式:“cors”,因为JavaScript可能无法访问结果响应的任何属性,如果模式为“no-cors”,则请求的资源上不存在“access Control Allow Origin”头。因此,不允许访问源“file://”。如果不透明响应满足您的需要,请将请求的模式设置为“no-cors”,以在禁用cors的情况下获取资源。如果从中删除
模式:“no-cors”
,并在获取调用中为请求URL加上
https://cors-anywhere.herokuapp.com/
,如下所示:
fetch('https://cors-anywhere.herokuapp.com/' +        'https://bittrex.com/api/v1.1/public/getmarketsummaries/“)
。有关其工作原理的解释,请参阅如何使用CORS代理绕过“无访问控制允许源标题”唯一的解决方案是禁用浏览器中的安全性?没有其他解决方案?这不是可以禁用的安全功能。唯一的解决方案是与域管理员联系,请求他们允许跨源访问您要从中加载数据的URL。