使用XDomainRequest调用跨域AJAX时出现权限拒绝错误



我创建了一个使用Google Javascript api的php页面。我试图使用Ajax动态地填充标记的信息窗口,但是在xdr上得到一个权限拒绝错误。开放的线。我已经检查了其他有关类似错误的帖子,并尝试了不同的更改,但仍然是相同的错误。

<!DOCTYPE html>
<html>
<head>
<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false"></script>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<style type="text/css">
html { height: 100% }
body { height: 100%; margin: 0; padding: 0 }
#map_canvas { height: 100% }
</style>
<script type=text/javascript>
var marker;
var map;
var xdr;
function loader()
{
        alert("XDR onload");
        alert("Got: " + xdr.responseText);
}
function Info(pmarker)
{
    google.maps.event.addListener(pmarker, 'mouseover', function()
    {
     if (window.XDomainRequest)
     {
        xdr = new XDomainRequest();
        if(xdr)
        {
            document.write('1');
            xdr.open("GET", "http://localhost/GMap/GroovyCaller.php?Node=Host1");
            xdr.send();
            document.write('2');
            xdr.onload = loader;
        }
        else
        {
            document.write('3');
            alert('Failed to create');
        }
     }
     else
     {
          document.write('4');
          alert('XDR does not exist');
     }
});
}
function createMarker() {
    var myLatlng = new google.maps.LatLng(-34.397, 150.644);
    var marker = new google.maps.Marker({
        position: myLatlng,
        map: map,
        title:"Hello World!"
        });
        Info(marker);
}
function initialize()
{
    var latlng = new google.maps.LatLng(-34.397, 150.644);
    var myOptions =
    {
        zoom: 8,
        center: latlng,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    map = new google.maps.Map(document.getElementById("map_canvas"),
    myOptions);

    createMarker();
}

</script>
</head>
<body onload="initialize()">
<div id="map_canvas" style="width:100%; height:100%"></div>
</body>
</html>

我有一个类似的问题,我有客户端代码运行在一个本地域(例如www.domain.local),试图联系服务器在localhost。即使当我添加Access-Control-Allow-Origin: *到服务器响应头,我仍然得到拒绝访问。

原来XDomainRequest不喜欢尝试从另一个域访问localhost。

我的解决方案是使用我的hosts文件创建另一个指向localhost的假域名,然后将XDR指向那个新域名。

GroovyCaller.php是否返回http报头Access-Control-Allow-Origin ?从http://msdn.microsoft.com/en-us/library/cc288060 (v = vs.85) . aspx:

跨域请求需要文档和服务器之间的相互同意。[…只有当服务器响应一个Access-Control-Allow-Origin报头为*或请求文档的确切URL时,它才会完成连接。

你的服务器必须知道你的客户端接受跨域连接。你可以从Access-Control-Allow-Origin: *开始让它工作,然后缩小范围。

相关内容

  • 没有找到相关文章

最新更新