2009-12-19 36 views
1

Ajax請求我在我的網頁下面的JavaScript:到不同的主機

var xhr = new XMLHttpRequest(); 
xhr.open('GET', 'http://www.google.com', true); 
xhr.onreadystatechange = function() { 
    if (xhr.readyState == 4) { 
    alert('resp received, status:' + xhr.status + ', responseText: ' + xhr.responseText); 
    }                  
};                   
xhr.send(null);               

這個執行並完成W/A的readyState的4,0狀態,而空的responseText和responseXML的。我知道它實際上正在發送請求b/c我試圖將xhr發送到我的機器上的服務器,並且服務器確實響應。爲什麼我沒有在responseText中獲取任何內容?它有什麼事情要做/這個事實xhr是要去一個不同的服務器?

當我打開了JS調試器,鍵入「XHR」檢查我得到這個對象:

XMLHttpRequest
DONE: 4
HEADERS_RECEIVED: 2
LOADING: 3
OPENED: 1
UNSENT: 0
abort: function abort() {
addEventListener: function addEventListener() {
dispatchEvent: function dispatchEvent() {
getAllResponseHeaders: function getAllResponseHeaders() {
getResponseHeader: function getResponseHeader() {
onabort: null
onerror: null
onload: null
onloadstart: null
onprogress: null
onreadystatechange: function() {
open: function open() {
overrideMimeType: function overrideMimeType() {
readyState: 4
removeEventListener: function removeEventListener() {
responseText: ""
responseXML: null
send: function send() {
setRequestHeader: function setRequestHeader() {
status: 0
statusText: ""
upload: XMLHttpRequestUpload
withCredentials: false

回答

15

does it have something to do w/ the fact that the xhr is going to a different server?

是的,你不能通過AJAX發送請求到另一臺服務器。而您可以從服務器端發送您的請求。因此,您需要實施以下工作流程: 您的頁面 - >您的服務器 - >第三方服務器 - >您的服務器 - >您的頁面,其中「 - >」表示發送數據。

+0

+1一個有效的非常簡單的代理。我使用CURL在PHP中編寫了其中的一個。 – tgandrews

1

你不能用JavaScript做跨域請求。最好的方法是使用你的服務器作爲代理。

2

跨站腳本是將代碼注入其他人的網頁的常用方法。爲了限制這一點,大多數瀏覽器現在停止客戶端開發人員向位於與原始頁面不同的域上的網頁創建JavaScript請求(通常通過XMLHttpRequest)。

可以解決這個問題只需創建你的域的虛擬腳本,轉發到你真正想要的頁面相同的請求。例如,對於您的情況,您可以創建http://mydomain.com/google.php(或您喜歡的任何腳本語言)的請求,然後使用file_get_contents或類似的方法下載Google頁面,並簡單地將其輸入echo