2011-02-08 73 views
0

我试图通过jQuery来加载XML数据的获取方法。该XML源位于以下网址: 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

浏览器块跨域XHR时。有些东西叫做Same-Origin-Policy,你需要遵循xhrs,或者你需要使用替代方法,如服务器端代理或者jsonp(如果它是由应用程序提供的话)。

+0

所以每次我做一个XHR请求以及引荐域和端口的时间必须是一样的吗?这是一个安全功能吗? – Adam 2011-02-08 20:09:26

+0

@adam,是的,其中包括协议 – hvgotcodes 2011-02-08 20:11:17

1

如果你需要解决同域问题(像许多API一样),请查看JSONP。我对jQuery并不熟悉,但如果URL有回调参数,它似乎会与getJSON进行JSONP调用。