Javascript API Opensky网络无法访问数据
OpenSky网络是一个用于全球飞机定位数据的API。使用Openlayers-3玩起来棒极了。。。但是(因为有一个but!) 使用JavaScript,我试图访问JSON数据的一些变量 我真的被堵住了。它可以通过Firefox中的简单导航来访问,而不是JavaScript 它看起来真的很愚蠢,因为它与其他API一起工作,比如Wikipedia、Wikidata、Openlayers-3的提名 我真的在问自己为什么这不适用于OpenSky网络。我看到的唯一一件事是Firefox向我展示了一个跨域问题,但我确信有一个解决方案 我尝试了很多技巧: Tech1Javascript API Opensky网络无法访问数据,javascript,json,xmlhttprequest,restful-url,Javascript,Json,Xmlhttprequest,Restful Url,OpenSky网络是一个用于全球飞机定位数据的API。使用Openlayers-3玩起来棒极了。。。但是(因为有一个but!) 使用JavaScript,我试图访问JSON数据的一些变量 我真的被堵住了。它可以通过Firefox中的简单导航来访问,而不是JavaScript 它看起来真的很愚蠢,因为它与其他API一起工作,比如Wikipedia、Wikidata、Openlayers-3的提名 我真的在问自己为什么这不适用于OpenSky网络。我看到的唯一一件事是Firefox向我展示了一个跨域
$.getJSON( url , function(data) {
console.log(data);
});
Tech2
$.ajax({
url: url,
type: 'GET',
success: function(data) {
console.info(data);
}
});
Tech3
$.ajax({
url: url,
dataType: 'jsonp',
crossDomain : true,
success:function(xhr, json){
alert("Success ");
},
error:function(){
alert("Error");
}
});
Tech4
var xhr = null;
var response = null;
if (window.XMLHttpRequest) { xhr = new XMLHttpRequest(); }
else { xhr = new ActiveXObject("Microsoft.XMLHTTP"); }
xhr.onreadystatechange = function() {
console.info("state changed");
if (xhr.readyState === 4) {
if (xhr.status === 200) {
response = xhr.responseText;
console.info("response="+response);
}
}
else {}
};
xhr.open("GET", url,true);
xhr.send(null);
使用所有这些技术和其他技术,我无法在opensky url api中获取JSON数据。我的意思是我想把它用作JavaScript变量,但我不能
这确实令人沮丧,因为在inspector工具(Firefox中的F12键)中,我可以看到JSON对象和值。有一个“同源”政策问题,然后我没有变量。有什么问题?我真的不明白“同源”政策概念的意义,英语不是我的母语
根据API文档的限制部分,我可以不用注册就可以完成
匿名用户是指不使用凭据访问API的用户。匿名用户的限制是:
- 匿名用户只能获取最近的状态向量,即时间参数将被忽略
- 匿名用户只能检索时间结果为10秒的数据。这意味着,API将返回当前的状态向量−(现在是mod 10)
如上所述,同一原产地政策(SOP)是这里的问题 它看起来真的很愚蠢,因为它与其他API一起工作,比如Wikipedia、Wikidata、Openlayers-3的提名
Origin
字段,并根据SOP允许或不允许请求。请注意,“不允许”并不意味着服务器拒绝数据,而是没有在响应标头中设置访问控制允许来源
字段,从而导致浏览器阻止请求。为了让浏览器允许请求,响应标题中的访问控制允许原点
字段必须等于原点
字段或*
。
您给出的API作为示例()返回访问控制允许来源:
,因此允许来自每个来源的请求
访问控制允许来源
字段,这意味着您的浏览器阻止请求并拒绝从服务器访问有效负载(如果发出请求的脚本是从其他来源加载的,则为您的服务器)。正如您在调试控制台中注意到的,数据在那里,但您的浏览器限制访问
我可以用JavaScript访问OpenSky网络API的URL上的变量吗
最近GitHub上也出现了类似的问题。跨来源请求在短期内将不可用。您必须使用Web服务器代理API请求
如果您将来在我们的服务中遇到任何困难,我建议您将问题发布到。我只是偶然发现了这根线。论坛中的问题将通知所有OpenSky管理员,使我们能够尽快做出响应。我是OpenSky开发人员之一 正如codepearlex已经提到的,OpenSkyAPI不允许CORS。我们最近启用了此功能,因此您现在应该能够从浏览器和任何域中访问API