2011-11-17 11 views
1

我創建了一個PHP頁面,利用谷歌的JavaScript API調用的跨域AJAX的時候。我正在嘗試使用Ajax動態地填充標記的信息窗口,但在xdr.open行上獲得權限被拒絕的錯誤。我檢查了與類似錯誤有關的其他帖子,並嘗試了不同的更改,但仍然出現相同的錯誤。權限被拒絕的錯誤使用XDomainRequest

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

此錯誤無關,與谷歌地圖API。據我所知,您只需調用一個本地PHP文件即可。當您在瀏覽器中打開「http://localhost/GMap/GroovyCaller.php?Node = Host1」時會發生什麼? – ThinkingStiff

+0

嗨,謝謝你的迴應......如果我直接調用GroovyCaller,我會得到所需的輸出。這個問題在我引入了Ajax代碼xdomainrequest後開始了。 – A11

+0

我添加了行 header('Access-Control-Allow-Origin:*'); 在php頁面的開始處。但是,錯誤仍然存​​在。 我試圖尋找更多的選項來解決這個問題,但什麼都沒發現。 任何進一步的幫助將不勝感激。 謝謝, 阿什溫 – A11

回答

1

GroovyCaller.php返回的HTTP頭Access-Control-Allow-Origin?來自http://msdn.microsoft.com/en-us/library/cc288060(v=vs.85).aspx

跨域請求需要文檔和服務器之間的雙方同意。 [...]如果服務器以*或訪問請求文檔的確切URL的Access-Control-Allow-Origin標頭作爲響應,它將僅完成連接。

您的服務器必須知道您的客戶端接受跨域連接。您可以從Access-Control-Allow-Origin: *開始工作,然後縮小範圍。

2

我有一個類似的問題,我有一個本地域上運行的客戶端代碼(例如www.domain.local)試圖聯繫服務器localhost。即使當我將Access-Control-Allow-Origin: *添加到服務器響應標頭時,我仍然遇到Access Denied。

原來XDomainRequest不喜歡嘗試從另一個域訪問本地主機。請參閱http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx的第6點。

我的解決方案是創建一個指向用我的hosts文件到本地主機,然後在新的域名指向XDR代替其他假域名。