【问题标题】:Cross domain XMLHTTPRequest error跨域 XMLHTTPRequest 错误
【发布时间】:2011-06-23 16:27:59
【问题描述】:

我正在尝试通过 jQuery get 方法加载 XML 数据。 XML 提要位于以下 URL: http://webservices.nextbus.com/service/publicXMLFeed?command=routeList&a=mbta

当我在浏览器中运行以下代码时,出现错误:

XMLHttpRequest 无法加载 http://webservices.nextbus.com/service/publicXMLFeed?command=routeList&a=mbta。 原点http://173.203.89.156 不是 允许 访问控制允许来源。

<!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>

此域是否明确阻止所有跨域 XMLHTTPRequest,或者是否可以绕过此错误?

【问题讨论】:

    标签: xml ajax web-services xmlhttprequest cross-domain


    【解决方案1】:

    浏览器阻止跨域 xhrs。对于 xhrs,您需要遵循一个称为 Same-Origin-Policy 的东西,或者您需要使用替代方案,例如服务器端代理或 jsonp(如果它是由应用程序提供的)。

    【讨论】:

    • 所以每次我发出 XHR 请求和引用域和端口都必须相同?这是一项安全功能吗?
    • @adam,是的,除此之外还有协议等
    • 我以前用过很多网络服务。是什么让这一款与众不同?
    • @adam,提供 javascript 的域中的服务是否相同?
    • 嗯,想到的例子是 Twitter。他们有一个 API 可以让你发出跨域请求,但也许我错了。
    【解决方案2】:

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

    【讨论】:

    • 这行得通,只要我附加回调=?查询字符串的参数。但是,应用程序会引发错误:'Uncaught SyntaxError: Unexpected token
    • 谢谢,无论如何这是有用的信息。 +1
    猜你喜欢
    • 2011-06-28
    • 2012-04-03
    • 2014-04-04
    • 2011-03-09
    • 1970-01-01
    • 2014-07-13
    • 1970-01-01
    • 2018-04-05
    • 1970-01-01
    相关资源
    最近更新 更多