Как проверить, работает ли сайт с JavaScript?Плюс советы по улучшению работы этой функции - PullRequest
1 голос
/ 12 декабря 2011

Мне нужно проверить, работает ли веб-сайт, и узнать время пинга.

У меня уже есть приблизительное время пинга (достаточно близко).Но мне все еще нужно проверить, находится ли сайт в сети и заставить функцию запускаться пять раз, и получить самое низкое значение ping (для того, чтобы сделать его более точным).

Пока мой код:

<script>
  function initPingTest(siteUrl){
    pingTester();
    function pingTester(){
      document.getElementById('site').innerHTML = '<center>' + siteUrl + '</center>';
      document.getElementById('pingT').innerHTML = '<center> testing.. </center>';
    var startTime=new Date();
    window.startTime=startTime.getTime();
    var imgSrc=siteUrl+ '?cacheBuster='+Math.random();
    var iFrame=document.getElementById('myPingTest');
    iFrame.onload=pingTime;
    iFrame.src=imgSrc;
    function pingTime() {
      var endTime=new Date();
      var pingResult = (endTime.getTime()-window.startTime);
      if(pingResult<hidden.hidden.value){
        document.getElementById('pingT').innerHTML = '<center>' + pingResult + '</center>';
        hidden.hidden.value=pingResult;
      }else{document.getElementById('pingT').innerHTML = '<center>' + hidden.hidden.value + '</center>';}
      } 
    } 
  }
</script>

<IFRAME style="display:none;" id=myPingTest></IFRAME>
<FORM NAME="hidden" STYLE="display:none"><INPUT TYPE="text" NAME="hidden" value="100000"></form>
<br>
<FORM method="get" NAME="ping" action="javascript:initPingTest(ping.url.value);"><font>Enter site adress(ie.www.yahoo.com)<br>http://</font>
  <INPUT TYPE="text" NAME="url" size="18"><input type="submit" value="Ping"/></form>
  <br>
  <table cellspacing=5px>
    <tr><th>
      Url:
    </th><th>
      Ping Time (miliseconds)
    </th></tr>
    <tr><td>
      <label id=site><center> - </center></label>
    </td><td>
      <label id=pingT><center> - </center></lable>
    </td></tr>
  </table>
</body></html>

1 Ответ

1 голос
/ 12 декабря 2011

Хотя я не верю, что Javascript «действительно» предлагает такую ​​функциональность, вы можете создать объект xmlhttprequest и, возможно, сравнить разницу между временем отправки и временем соединения.

Следующий код показывает возможный способ достижения этого: Изменить: должен предупредить, если сервер сейчас не работает

var address = "http://www.google.com";

var t1 = Date.now();
var t2;

var max = 100000;
var failed = false;

var httpReq = (window.XMLHttpRequest)?new XMLHttpRequest():new ActiveXObject("Microsoft.XMLHTTP");
if(httpReq == null) {
    console.log("Error: XMLHttpRequest failed to initiate.");
}
httpReq.onreadystatechange = function() {

    var failTimer = setTimeout(function() {
                               failed = true;
                               httpReq.abort();
                               }, max);

    if (httpReq.readyState == 4) {  //Completed loading
        if (!failed && (httpReq.status == 200 || httpReq.status == 0)) {

            clearTimeout(failTimer);

            t2 = Date.now();

            var timeTotal = (t2 - t1);
            if(timeTotal > max) {
                onFail();
            } else {
                onSuccess(timeTotal);
            }

        }
        else {  //Otherwise, there was a problem while loading
            console.log("Error " + httpReq.status + " has occurred.");
            onFail();
        }
    }
}
try {
    httpReq.open("GET", address, true);
    httpReq.send(null);

} catch(e) {
    console.log("Error retrieving data httpReq. Some browsers only accept cross-domain request with HTTP.");
    onFail();
}


function onSuccess(timeTotal) {

    alert("Time needed to connect: " + timeTotal);
}
function onFail() {
    alert("Well this isn't good");
}

iframe также может быть жизнеспособным решением.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...