如何使用Fetch API跨源加载Javascript中的文本或JSON数据?
首先,我在Javascript中使用了以下代码(可能是旧代码):如何使用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
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。