2016-11-10 55 views
0

我使用後面的代碼來檢索就緒狀態,它對我很好。請問我該如何在此內容中添加其他狀態人員。就像如果URL不可用,我想打印一條消息給用戶。像使用AJAX,並檢索就緒狀態

document.getElementById("div p").innerHTML = "Ping is not success!"; 

並試圖使它看起來像一點點更加奇特,然後一個普通的HTML文本。 她是我的代碼:

url = "<whatever you want to ping>" 
ping = new XMLHttpRequest();  
ping.onreadystatechange = function(){ 

    document.body.innerHTML += "</br>" + ping.readyState; 

    if(ping.readyState == 4){ 
     if(ping.status == 200){ 
      result = ping.getAllResponseHeaders(); 
      document.body.innerHTML += "</br>" + result + "</br>"; 
     } 
    } 

} 
ping.open("GET", url, true);  
ping.send(); 
+1

'如果(ping.status == 200){ 結果= ping.getAllResponseHeaders(); console.log(result) } else { document.getElementById(「div p」)。innerHTML =「Ping不成功!」; }' – guest271314

+0

它失敗,我得到一個錯誤,說的是不好的網址。 https://jsfiddle.net/9Lnq4a7f/1/ – Itslearning

+1

@Itslearning正確;在https:// fiddle.jshell.net上運行的腳本無法讀取來自https:// google.com的響應,因爲它們具有不同的來源。在https:// fiddle.jshell.net上運行的腳本只能從https:// fiddle.jshell.net中讀取其他資源,或者從服務器讀取CORS頭文件。 – apsillers

回答

1

當一個請求結束時,readyState4,但status可能比200以外的值。如果status0,則表示網絡錯誤或CORS故障(對於跨源服務器)。如果它是其他值(如404),那意味着腳本到達了服務器,但服務器沒有成功處理請求(或者是因爲使用的URL路徑沒有意義,或者是發生了服務器端錯誤,等等。)

ping.onreadystatechange = function(){ 

    document.body.innerHTML += "<br>" + ping.readyState; 

    if(ping.readyState == 4){ 
     if(ping.status == 200){ 
      result = ping.getAllResponseHeaders(); 
      document.body.innerHTML += "<br>" + result + "<br>"; 
     } else if(ping.status == 0) { 
      document.getElementById("foobar").innerHTML = "Ping is not successful! Could not get any response from the server, due to a network failure, CORS error, or offline server."; 
     } else { 
      result = ping.getAllResponseHeaders(); 
      document.getElementById("foobar").innerHTML = "We got a response from the server, but it was status code " + ping.status; 
     } 
    } 

} 
+0

謝謝你的回答。我不認爲我完全明白你的意思。但我做了一個jsfiddle。你有一點時間看,因爲我認爲我不是正確的。 https://jsfiddle.net/xefd1xo7/3/ – Itslearning

+0

@Itslearning幾個問題:你的小提琴實際上並沒有調用「open」或「send」,它引用了不存在的ID值。這是一個清理版本,可以運行:https://jsfiddle.net/xefd1xo7/5/。此外,在這種情況下,「8.8.8.8」不是一個服務器名稱;它會加載當前原點(例如'https:// fiddle.jshell.net/8.8.8.8')的路徑'/ 8.8.8.8'。此外,您應該瞭解[same-origin policy](https://en.wikipedia.org/wiki/Same-origin_policy),它不允許'domainA.com'讀取來自'domainB.com'的消息,因此請求從JSFiddle到'http:// 8.8.8.8 /'將會失敗。 – apsillers