2011-02-01 4 views
4

Привет, я делаю xmhhttp-запрос, но на сайт требуется некоторое время для загрузки, поэтому я получаю только ReadyState = 3 и status = 200. Поэтому мне нужно что-то, что ждет, пока readystate = 4, но я хочу ограничить эту функцию, чтобы она проверялась только раз в секунду, если readistate = 4, иначе ничего не делать.Требуется функция задержки javascript

Как может выглядеть такая функция задержки?

if (xmlhttp.readyState==4 && xmlhttp.status==200)//Add the delay here so that the else doesn't occur 
    { 
    var txt=xmlhttp.responseText; 
    ..... 
    else { 

    document.write("status: " + xmlhttp.readyState + " " + xmlhttp.status); 
    } 

ответ

0

Мы можем написать функцию для проверки состояния вашего XmlHttp-объекта:

var checkState = function(xmlhttp, callback) { 
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
    callback(whatever, arguments, that, you, want, to, send); 
    } else { 
    // Check back again 1 sec later 
    setTimeout(checkState, 1000); 
    } 
}; 

Затем вы можете использовать его как это:

checkState(xmlhttp, function(whatever, arguments, you, need) { 
    // the code here will be run when the readyState is 4 and the status is 200 
}); 

Две вещи, хотя:

  • Функция checkState вернется независимо от того, o f readyState, поэтому убедитесь, что вы выполняете только то, что зависит от него в обратном вызове, а не после.
  • Если ReadyState и статус никогда не получили желаемые значения, вам не повезло (но вы можете расширить функцию, чтобы принять второй обратный вызов, который будет обрабатывать тайм-аут).
+0

Приятно поблагодарить вас за вашу помощь, очень полезно =) – nicklas

2

setInterval может сделать трюк, если я вас правильно понял:

var seconds = 0; 
var interval = setInterval(function() { 
    if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { 
     // Stop checking 
     clearInterval(interval); 
     // Ready 
     var txt = xmlhttp.responseText; 

    } else if (++seconds > 10) { // Do we give up? 
     clearInterval(interval); 
     // Give up 

    } 
}, 1000); // Checks once every second 
-2

Может использовать что-то вроде

Edit: использовать onreadystatechange:

Connection.onreadystatechange = function() 
{ 
    if (Connection.readyState != 4) 
    { 
     return; 
    } 
    else 
    { 
     // do your thing 
    } 
}; 
+0

Это не ответ; вы в значительной степени скопировали сам вопрос. Он спрашивает, как сделать «подождать немного» -part :) – Jakob

+0

Но он попросил код «ждать» – Magnus

+0

Эмм, да, это так. Почему я пропустил это, это выходит за рамки меня. Вернитесь назад, фиксируя это: P – Zsub

4

Почему бы вам изобретать колесо?

Вы должны просто передать обработчик XHRsonreadystatechange обратный вызов.

xmlhttp.onreadystatechange = function() { 
    switch(xmlhttp.readyState) { 
      case 4: { 
       if (xmlhttp.status === 200) { 
        var txt = xmlhttp.responseText; // or do something else here 
       } 
       break; 
      } 
      case 3: { 
       // go interactive ! 
       break; 
      } 
    } 
}; 
Смежные вопросы