2014-07-09 41 views
0

我有一個代碼應該檢查頁面是否被加載,然後提醒我狀態。 出於某種原因的代碼不起作用。 如果你能看看它並告訴我我做錯了什麼,我將不勝感激。 尋找答案!在Ajax中打開網頁並檢查雕像代碼

var xmlHttp = createXmlHttpRequestObject(); 
function createXmlHttpRequestObject(){ 
    var xmlHttp; 
    if(window.ActiveXObject){ 
     try{ 
     xmlHttp = new ActiveXObject("Microsoft.XMLHTTP"); 

     }catch(e){ 
     xmlHttp = false; 
     } 
    }else{ 
    try{ 
     xmlHttp = new XMLHttpRequest(); 

     }catch(e){ 
     xmlHttp = false; 
     } 
    } 
    if(!xmlHttp){ 
     alert("Error"); 
    } 
    else{ 
    return xmlHttp; 
    } 

} 
function process(){ 
    if(xmlHttp.readyState==0 || xmlHttp.readyState==4){ 
     xmlHttp.open("GET", "djhgkjshgkjsd.com", true); 
     xmlHttp.onreadystatechange = handleServerResponse; 
    } 
    else{ 
     setTimeout('process()', 1000); 
    } 
} 

function handleServerResponse(){ 
    if(xmlHttp.readyState==4){ 
     if(xmlHttp.status==200){ 
      xmlResponse = xmlHttp.responseXML; 
      alert("Hi..."); // This is just to test where my code fails 

     }else{ 
      alert('Something is wrong!'); 
     } 
    } 

} 
+0

定義「不管用。」它在哪裏/如何失敗? – David

回答

0

這裏有幾個問題。

主要的是你永遠不會send()的HTTP請求。

但是,你有一些其他問題:

  • 你永遠不會調用process
  • 您是輪詢readyState的而不是使用readystatechange事件處理程序
  • 你只是當readyState分配readystatechange處理器已經是0(失敗)或4(完成),所以它永遠不會被調用
  • 你有什麼看起來像一個絕對的URI,但
    • 該方案(例如, http://)丟失
    • 你會遇到同源策略限制試圖訪問有關其他域中的數據

一個清理你的代碼的版本可能是這個樣子:

// I've removed the code to support IE7 and earlier. 
// Those browsers are dead and the approach you were using was 
// poor anyway (it prioritised non-standard approaches over 
// standard instead of the other way around); 

var xmlHttp = new XMLHttpRequest(); 

// Warning Cross-Origin request. The server must grant permission 
// for your site to access the data using CORS for this to work 
xmlHttp.open("GET", "http://example.com", true); 

xmlHttp.onreadystatechange = handleServerResponse; 
xmlHttp.send(); 

function handleServerResponse() { 
    // Use a local variable. Globals are horrible 
    // and work poorly with event driven programming 
    var xmlResponse; 
    if (this.readyState == 4) { 
     if (this.status == 200) { 
      xmlResponse = this.responseXML; 
      alert("Variable populated"); 
     } else { 
      alert('Something is wrong!'); 
     } 
    } 

} 
+0

非常感謝!但你是什麼意思「//警告跨源請求服務器必須授予您的網站權限 //使用CORS訪問數據才能使其工作」? – user2634624

+0

默認情況下,您的網站不允許指示用戶的瀏覽器從另一個網站獲取數據(這可能是因爲它們已登錄到其他網站而只能訪問的私人數據),並將該數據提供給您的JavaScript 。 – Quentin

+0

我該如何改變? (如果可能的話)。我的最終目標是能夠判斷用戶是否有正在運行的服務器。通過訪問一個不存在的頁面,我得到一個瀏覽器錯誤或一個默認的服務器錯誤(這就是我正在嘗試閱讀的內容)。 – user2634624