2011-06-17 130 views
0

美好的一天。我有流動的問題。javascript,php,ajax - AJAX響應始終爲空

我有2個域名。在一個域名上,我發送了一個ajax帖子給另一個域名,期待一些結果。問題是響應總是空的。如果我檢查網絡標籤的請求看起來沒問題(帖子數據沒問題),它沒有收到任何錯誤,它結束了(我在句柄響應函數上發出一個警告來檢查響應是什麼)。我嘗試向隨機域發送請求(如example.com),以查看是否有任何東西。答覆是一樣的......沒有。

這裏是我使用的腳本:

function sendReqPost(url) { 
     http_request = false; 
     if (window.XMLHttpRequest) { // Mozilla, Safari,... 
     http_request = new XMLHttpRequest(); 
     if (http_request.overrideMimeType) { 
      // set type accordingly to anticipated content type 
      //http_request.overrideMimeType('text/xml'); 
      http_request.overrideMimeType('text/html'); 
     } 
     } else if (window.ActiveXObject) { // IE 
     try { 
      http_request = new ActiveXObject("Msxml2.XMLHTTP"); 
     } catch (e) { 
      try { 
       http_request = new ActiveXObject("Microsoft.XMLHTTP"); 
      } catch (e) {} 
     } 
     } 
     if (!http_request) { 
     alert('Cannot create XMLHTTP instance'); 
     return false; 
     } 
     //http_request.onreadystatechange = handleResponseAccept; 
     http_request.open('POST', url, true); 
     http_request.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
     http_request.setRequestHeader("Content-length", parameters.length); 
     http_request.setRequestHeader("Connection", "close"); 
     //parameters is a global variable with the post data.  
     http_request.send(parameters); 
    } 

我一倍腳本檢查一切......我也插在請求PHP頁面回聲,看看我是否得到任何東西。無論我做什麼,迴應都是空的。 P.S.在另一個域上,ajax腳本工作正常。一模一樣。

+0

http_request.responseText在哪裏? – 2011-06-17 12:31:35

+0

這聽起來像是你遇到了XSS限制。另外,請原諒我,因爲我可能已經跑過去了,你知道你是在異步模式下正確運行它嗎? – 2011-06-17 12:33:04

+0

請考慮爲自己做一個忙,並使用庫(例如jQuery)。這整個代碼總結爲 `$ .post(url,parameters,function(){/ * on success here//});` – mkilmanas 2011-06-17 12:40:56

回答

4

我有2個域名。在一個域名上,我發送了一個ajax帖子給另一個域名,期待一些結果。

這是你的問題。這是因爲JavaScript中的同源策略。這就是爲什麼...

...在另一個域上的ajax腳本工作正常。

雖然有一些解決方法,稱爲Cross Domain Ajax

爲了您的需要,因爲您明顯需要HTML而不是JSON,所以我會建議一個小PHP腳本來從其他域獲取內容並將其轉發到客戶端。這將被稱爲Ajax代理

請參閱this question

0

我沒有看到您的http_request.responseText,它返回請求URL中的echo'ed。

所以儘量補充一點:

http_request.onreadystatechange = function() { 
    if (http_request.readyState == 4) { 
     if (http_request.status == 200) { 
      alert(http_request.responseText); 
     } else { 
      alert("An error occurred: "+ http_request.statusText); 
     } 
    } 
}; 

前:

//parameters is a global variable with the post data. 

看看它是否工作。