2017-02-10 7 views
-1

XMLHttpRequestはhttps://opensky-network.org/api/states/allをロードできません。 いいえ「アクセス制御 - 許可原点」ヘッダは、要求された 資源上に存在します。したがって、原点「ヌル」はアクセスが許可されません。このようなAPIからデータを取得中'Access-Control-Allow-Origin'エラーなし

イム次のエラーを取得:ヘッドで

<script> 

     $.get('https://opensky-network.org/api/states/all', function(data) { 
      console.log(data); 
     }); 

    </script> 

私はこれを持っている:

<script 
     src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js" 
     integrity="sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8=" 
     crossorigin="anonymous"> 
    </script> 

全体のコードは次のようになります。

<!DOCTYPE html> 
<html> 
    <head> 
    <title>Geolocation</title> 
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no"> 
    <meta charset="utf-8"> 
    <style> 


     #map { 
     height: 100%; 
     } 
     /* Optional: Makes the sample page fill the window. */ 
     html, body { 
     height: 100%; 
     margin: 0; 
     padding: 0; 
     } 
    </style> 


    <script 
     src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js" 
     integrity="sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8=" 
     crossorigin="anonymous"> 
    </script> 


    </head> 
    <body> 
    <div id="map"></div> 


    <script> 


     function initMap() { 
     var map = new google.maps.Map(document.getElementById('map'), { 
      center: {lat: -34.397, lng: 150.644}, 
      zoom: 15, 
      styles: 
      [{"featureType":"all","elementType":"labels.text.fill","stylers":[{"saturation":36},{"color":"#000000"},{"lightness":40}]},{"featureType":"all","elementType":"labels.text.stroke","stylers":[{"visibility":"on"},{"color":"#000000"},{"lightness":16}]},{"featureType":"all","elementType":"labels.icon","stylers":[{"visibility":"off"}]},{"featureType":"administrative","elementType":"geometry.fill","stylers":[{"color":"#000000"},{"lightness":20}]},{"featureType":"administrative","elementType":"geometry.stroke","stylers":[{"color":"#000000"},{"lightness":17},{"weight":1.2}]},{"featureType":"landscape","elementType":"geometry","stylers":[{"color":"#000000"},{"lightness":20}]},{"featureType":"poi","elementType":"geometry","stylers":[{"color":"#000000"},{"lightness":21}]},{"featureType":"road.highway","elementType":"geometry.fill","stylers":[{"color":"#000000"},{"lightness":17}]},{"featureType":"road.highway","elementType":"geometry.stroke","stylers":[{"color":"#000000"},{"lightness":29},{"weight":0.2}]},{"featureType":"road.arterial","elementType":"geometry","stylers":[{"color":"#000000"},{"lightness":18}]},{"featureType":"road.local","elementType":"geometry","stylers":[{"color":"#000000"},{"lightness":16}]},{"featureType":"transit","elementType":"geometry","stylers":[{"color":"#000000"},{"lightness":19}]},{"featureType":"water","elementType":"geometry","stylers":[{"color":"#000000"},{"lightness":17}]}] 

      }); 

     var infoWindow = new google.maps.InfoWindow({map: map}); 

     // Try HTML5 geolocation. 
     if (navigator.geolocation) { 
      navigator.geolocation.getCurrentPosition(function(position) { 
      var pos = { 
       lat: position.coords.latitude, 
       lng: position.coords.longitude 
      }; 

     var image = { 
      url: 'icon.png', 
      size: new google.maps.Size(80, 80), 
      origin: new google.maps.Point(0, 0), 
      anchor: new google.maps.Point(17, 34), 
      scaledSize: new google.maps.Size(50, 50) 
     }; 


     var marker = new google.maps.Marker({ 
      position: pos, 
      animation: google.maps.Animation.DROP, 
      map: map, 
      icon: image, 
     }); 


      infoWindow.setPosition(pos); 
      infoWindow.setContent('U bevindt zich hier.'); 
      map.setCenter(pos); 
      }, function() { 
      handleLocationError(true, infoWindow, map.getCenter()); 
      }); 
     } else { 
      // Browser doesn't support Geolocation 
      handleLocationError(false, infoWindow, map.getCenter()); 
     } 
     } 



     function handleLocationError(browserHasGeolocation, infoWindow, pos) { 
     infoWindow.setPosition(pos); 
     infoWindow.setContent(browserHasGeolocation ? 
           'Error: The Geolocation service failed.' : 
           'Error: Your browser doesn\'t support geolocation.'); 
     } 


    </script> 

    <script> 

     $.get('https://opensky-network.org/api/states/all', function(data) { 
      console.log(data); 
     }); 

    </script> 

    <script async defer 
    src="https://maps.googleapis.com/maps/api/js?key=AIzaSyBCX-164-aso7Qtue97g_6kGdKVKkwN4SE&callback=initMap"> 
    </script> 

    </body> 
</html> 

https://jsfiddle.net/ryo14gyk/

答えて

1

ウェブページがXMLHttpRequestオブジェクトを使用してリモートサーバーからデータを送受信する場合、スクリプトはsame origin policyの影響を受けます。

それを作るスクリプトをサーバーから別のドメイン上にあるように、ブラウザがリクエストをブロックしています。これはセキュリティ上の理由によるものです。

あなたは、クロスドメインリクエストをしたいときに別の何かをする必要があります。 「きれいな」方法の1つは、APIレベルでenable CORSです。

私は「opensky-network」APIをすばやく見ていましたが、JavaとPhytonの手順には注意していますが、JavaScriptはありません(同じ原点ポリシーがブラウザのJSに適用されます)。私は彼らに連絡し、CORSを有効にするオプションがあるかどうか尋ねてみることをお勧めします。

ていない場合は、選択肢がJSONP(彼らはそれを許可している場合)、または自分で構築し、CORSの通信を有効にすることができます右のヘッダとAPIデータを返すことができPROXYです。 APIのbeacuse

-1

このエラーは、誰がデータを要求することを可能にdosn't。要求時にヘッダ許可パラメータを送信する必要があります

関連する問題