Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript API Opensky网络无法访问数据_Javascript_Json_Xmlhttprequest_Restful Url - Fatal编程技术网

Javascript API Opensky网络无法访问数据

Javascript 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向我展示了一个跨域

OpenSky网络是一个用于全球飞机定位数据的API。使用Openlayers-3玩起来棒极了。。。但是(因为有一个but!)

使用JavaScript,我试图访问JSON数据的一些变量

我真的被堵住了。它可以通过Firefox中的简单导航来访问,而不是JavaScript

它看起来真的很愚蠢,因为它与其他API一起工作,比如Wikipedia、Wikidata、Openlayers-3的提名

我真的在问自己为什么这不适用于OpenSky网络。我看到的唯一一件事是Firefox向我展示了一个跨域问题,但我确信有一个解决方案

我尝试了很多技巧:

Tech1

$.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)

因此,我有几个问题:

  • 我可以用JavaScript访问OpenSky网络API的URL上的变量吗

  • 为什么这个特定的URL有问题

  • 仅此url的“同源”策略有什么问题


  • 如上所述,同一原产地政策(SOP)是这里的问题

    它看起来真的很愚蠢,因为它与其他API一起工作,比如Wikipedia、Wikidata、Openlayers-3的提名

  • 仅此url的“同源”策略有什么问题
  • 当服务器接收到传入请求时,它可以检查请求头中的
    Origin
    字段,并根据SOP允许或不允许请求。请注意,“不允许”并不意味着服务器拒绝数据,而是没有在响应标头中设置
    访问控制允许来源
    字段,从而导致浏览器阻止请求。为了让浏览器允许请求,响应标题中的
    访问控制允许原点
    字段必须等于
    原点
    字段或
    *
    。 您给出的API作为示例()返回
    访问控制允许来源:
    ,因此允许来自每个来源的请求

  • 为什么这个特定的URL有问题
  • OpenSky API在响应标头中不包含
    访问控制允许来源
    字段,这意味着您的浏览器阻止请求并拒绝从服务器访问有效负载(如果发出请求的脚本是从其他来源加载的,则为您的服务器)。正如您在调试控制台中注意到的,数据在那里,但您的浏览器限制访问

    我可以用JavaScript访问OpenSky网络API的URL上的变量吗

    最近GitHub上也出现了类似的问题。跨来源请求在短期内将不可用。您必须使用Web服务器代理API请求


    如果您将来在我们的服务中遇到任何困难,我建议您将问题发布到。我只是偶然发现了这根线。论坛中的问题将通知所有OpenSky管理员,使我们能够尽快做出响应。

    我是OpenSky开发人员之一

    正如codepearlex已经提到的,OpenSkyAPI不允许CORS。我们最近启用了此功能,因此您现在应该能够从浏览器和任何域中访问API