2009-11-19 43 views
10

我有網站使用XMLHttpRequest(實際上是jQuery)。我還有另一個站點在同一臺服務器上運行,它提供一個腳本文件,使XHR請求返回到該站點,即。我可以在從該端口加載的腳本文件的不同端口上使用XMLHttpRequest嗎?

http://mysite:50000/index.html包括

<script src="http://mysite:9000/otherscript.js"></script> 

http://mysite:9000/otherscript.js包括

$.ajax({ 
    url: 'http://mysite:9000/ajax/stuff' 
}); 

的問題是 - 這是行不通的。來自加載腳本的AJAX請求只會失敗,並且不會顯示錯誤消息。從我所能找到的這是舊的同源起源政策。鑑於我控制了這兩個網站,我能做些什麼來完成這項工作? 「document.domain」技巧似乎沒有爲XMLHttpRequest做一件事。

回答

10

Nope-不能XHR做到這一點。相同的域策略在此非常嚴格 - 相同的主機,相同的端口,相同的協議。抱歉!你必須訴諸其他技巧(iframes,標題操作等)才能使其工作。

+0

什麼是「標題操縱」把戲? – EMP 2009-11-20 00:05:54

+0

如果您已經簽名了javascript,您可以在FF上執行此操作。 – bmargulies 2009-11-20 00:13:14

+2

見http://dannythorpe.com/2008/07/28/cross-domain-transport-with-windowname/和http://orensol.com/2009/06/07/cross-domain-ajax-calls-and例如,圖像通信如何進行。有jQuery和dojo插件很好地包裝了這個東西。 – nitzmahone 2009-11-20 00:13:25

10

您可以通過添加Access-Control-Allow-Origin頭做到這一點。 如果你正在使用PHP

header("Access-Control-Allow-Origin: http://example.com"); 

或node.js中

response.writeHead(200,{'Access-Controll-Allow-Origin':' http://example.com'}); 

這必須爲你做的伎倆總是對我的作品

0

我只是解決了類似的問題,用PHP服務我目前正在通過使單線代理PHP頁面,SimpleProxy.php玩弄(不知道PHP的解決方案是如何相關的是這種直接的,但...):

<?php 
echo file_get_contents('http://localhost:4567'); 
?> 

在我的XMLHttpRequest我代替「http://localhost:4567」,從而有效地把在同一個域作爲我的.js代碼請求使用「SimpleProxy.php」。

相關問題