2016-11-10 51 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