2011-02-08 7 views
0

jQueryのgetメソッドを使用してXMLデータをロードしようとしています。 XMLフィードは、次のURLにあります。私は、ブラウザに次のコードを実行すると http://webservices.nextbus.com/service/publicXMLFeed?command=routeList&a=mbtaクロスドメインXMLHTTPRequestエラー

、私はエラーを取得する:

XMLHttpRequest cannot load http://webservices.nextbus.com/service/publicXMLFeed?command=routeList&a=mbta . Origin http://173.203.89.156 is not allowed by Access-Control-Allow-Origin.

<!DOCTYPE html> 
<html> 
<head> 
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> 
<title>Bus Map</title> 
<style type="text/css"> 
    html { height: 100% } 
    body { height: 100%; margin: 0px; padding: 0px } 
    #map_canvas { height: 100% } 
</style> 
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=true"> 
</script> 
<script type="text/javascript" src=" https://ajax.googleapis.com/ajax/libs/jquery/1.5.0/jquery.min.js"> 
</script> 
<script type="text/javascript"> 

    $(document).ready(function() { 
     var myLatlng = new google.maps.LatLng(42.3966499, -71.12188); 
     var myOptions = { 
      zoom: 14, 
      center: myLatlng, 
      mapTypeId: google.maps.MapTypeId.ROADMAP 
     }; 
     var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 
     $.get('http://webservices.nextbus.com/service/publicXMLFeed?command=routeList&a=mbta', function(stops) { 
      alert(stops[0]);                          
     }) 
    }); 

</script> 
</head> 

<body> 
<div id="map_canvas" style="width: 100%; height: 100%"></div> 
</body> 
</html> 

は断固としてすべてのクロスドメインをブロックし、このドメインであり、 XMLHTTPRequests、またはこのエラーをバイパスする場所はありませんか?

答えて

2

ブラウザがクロスドメインxhrsをブロックします。あなたはxhrsのために従う必要があるSame-Origin-Policyと呼ばれるものがあります。あるいは、アプリケーションによって提供されている場合は、サーバーサイドプロキシまたはjsonpのような代替手段を使用する必要があります。

+0

私はXHRを作成するたびに、リファラードメインとポートは同じでなければなりません。それはセキュリティ機能ですか? – Adam

+0

@adam、はい、他のものの中でもプロトコルのように – hvgotcodes

+0

私はこれまでに多くのWebサービスを使用してきました。何が違うのですか? – Adam

1

多くのAPIのように、同じドメインの問題を回避する必要がある場合は、JSONPを調べてください。私はjQueryに慣れていませんが、URLにコールバックパラメータがある場合はgetJSONでJSONPを呼び出すようです。

+0

私はコールバックを追加する限り、これは動作しますか?パラメータをクエリ文字列に追加します。ただし、アプリケーションはエラーをスローします。 'Uncaught SyntaxError:予期しないトークン<'これは、アプリケーションがjsonを期待していて、代わりにXMLを取得するためですか? – Adam

+0

ああ、そうです。これはXMLではなくJSONで動作します。 –

+0

ありがとう、これはとにかく便利な情報です。 +1 – Adam

関連する問題