2011-02-08 4 views
0

Я пытаюсь загрузить данные XML с помощью метода get jQuery. Подача 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

браузер блокирует перекрестный домен xhrs. Есть что-то, называемое Same-Origin-Policy, которое нужно соблюдать для xhrs, или вам нужно использовать альтернативу, такую ​​как прокси-сервер или jsonp, если она предоставляется приложением.

+0

Итак, каждый раз, когда я делаю XHR, запрос и домены-рефералы и порты должны быть одинаковыми? Это функция безопасности? – Adam

+0

@adam, да, среди прочего, например, протокол – hvgotcodes

+0

Я использовал множество веб-сервисов раньше. Что делает это другим? – Adam

1

Если вам нужно обойти проблему с одинаковым доменом (как это делают многие API), загляните в JSONP. Я не знаком с jQuery, но он вызывает JSONP-вызовы с getJSON, если URL-адрес имеет параметр обратного вызова.

+0

Это работает, если я добавляю обратный вызов =? параметр в строку запроса. Тем не менее, приложение выдает сообщение об ошибке: «Uncaught SyntaxError: Неожиданный токен <». Это потому, что приложение ожидает json и получает XML вместо этого? – Adam

+0

А, да. Это работает для JSON, а не для XML. –

+0

Спасибо, это полезная информация в любом случае. +1 – Adam

Смежные вопросы