2012-02-19 10 views
9

çağırır. Veriler mevcut değilse, verileri yükü kullanarak getirin ve ardından her x dakikada bir aynı şeyi yapın.kullanarak setTimeout Veri bir tablo var olup olmadığını kontrol etmek için setTimeout kullanmaya çalışıyorum

Şimdiye dek sahip olduğum şeyler. Bazı nedenlerden dolayı, setTimeout, bloğa isabet ettiğinde çalışmaz.

Bunun en iyi yolu olup olmadığından emin bile değilim.

var sTimeOut = setTimeout(function() { 
     $.ajax({ 
      url: 'CheckIfDataExists/' + 
         new Date().getTime(), 
      success: function (response) { 
       if (response == 'True') { 
        $('.DataDiv') 
         .load('GetFreshData/' + new Date() 
          .getTime(), { "Id": $("#RowID").val() }); 
       } 
      }, 
      complete: function() { 
       clearTimeout(sTimeOut); 
      } 
     }); 
    }, 10000); 

Herhangi bir yardım büyük takdir edilecektir.

Güncelleme

... böyle

setTimeout(function(){checkData()}, 5000); 
    function checkData(){ 
    $.ajax({ 
      url: 'CheckIfDataExists/' + 
          new Date().getTime(), 
      success: function (response) { 
       if (response == 'True') {      
        $('.DataDiv') 
          .load('GetFreshData/' + new Date() 
           .getTime(), { "Id": $("#RowID").val() }); 
       } else { 
        $('.OutOfWindow').html('No Data Found'); 
        setTimeout(function() { checkData() }, 5000); 
       } 
      }, 
      complete: function() { 
       // clearTimeout(sTimeOut); 
      } 
     }); 
    } 
+0

Eğer ([senin ayıklayıcısını kontrol] ettiniz http://blog.niftysnippets.org /2011/03/no-excuse.html) neyin yanlış olduğunu görmek için? JS mükemmel görünüyor: http://jsfiddle.net/FgT22/ – gideon

+0

Evet. İyi çalışıyor. Veritabanında hiçbir veri olmadığında beklendiği gibi çalışır (yanıt doğru olduğunda). Yanlış olduğunda, x dakika sonra tekrar kontrol etmek istiyorum. Meselenin olduğu yer burası. Tekrar kontrol etmez. Başarı zaman aşımını temizlemekten sorumlu olduğum için, bir önceki kontrol tamamlanmadan önce bir sonraki kontrolün işlenmemesi gerekiyor. – mkizito76

+0

Bu benim şimdi sahip olduğum ve işe yarayacak gibi görünüyor. Bunu yapmanın en iyi yolu bu mu? Bu arada, yardım için teşekkürler. – mkizito76

cevap

16

şey çalışmalı, ilk pasajı yüzden çalıştırmak test edebilir lokalize edilir. Ben kodu açıkladı ve bunu setTimeout (Yayınınızdaki Güncellemenize itibaren) fark gibi kodunuzu

ne olması gerektiği aşağıda sadece bu yüzden çağırmanız gerekir kontrol etmek, hedef fonksiyonu kez çağrıları ettik Başarısız bir kontrol yaparsanız tekrar.

JsFiddle üzerine bakınız: http://jsfiddle.net/jQxbK/

//we store out timerIdhere 
var timeOutId = 0; 
//we define our function and STORE it in a var 
var ajaxFn = function() { 
     $.ajax({ 
      url: '/echo/html/', 
      success: function (response) { 
       if (response == 'True') {//YAYA 
        clearTimeout(timeOutId);//stop the timeout 
       } else {//Fail check? 
        timeOutId = setTimeout(ajaxFn, 10000);//set the timeout again 
        console.log("call");//check if this is running 
        //you should see this on jsfiddle 
        // since the response there is just an empty string 
       } 
      } 
     }); 
} 
ajaxFn();//we CALL the function we stored 
//or you wanna wait 10 secs before your first call? 
//use THIS line instead 
timeOutId = setTimeout(ajaxFn, 10000); 

gibi görünmelidir Kodunuz:

var timeOutId = 0; 
var ajaxFn = function() { 
     $.ajax({ 
      url: 'CheckIfDataExists/' + new Date().getTime(), 
      success: function (response) { 
       if (response == 'True') { 
        $('.DataDiv'). 
        load('GetFreshData/' + new Date(). 
          getTime(), { "Id": $("#RowID").val() }); 
        clearTimeout(timeOutId); 
       } else { 
        timeOutId = setTimeout(ajaxFn, 10000); 
        console.log("call"); 
       } 
      } 
      }); 
} 
ajaxFn(); 
//OR use BELOW line to wait 10 secs before first call 
timeOutId = setTimeout(ajaxFn, 10000); 
+0

Vay, bu harika! Yardım için çok teşekkür ederim. Yük olay ajaxFn para cezaları hemen kovduğunda bir şey daha. AjaxFn yangınlarından önce (10 saniye kadar) bir bekleme yapmak istiyorum (çünkü yük biraz zaman alabilir). Diğer bir deyişle, ajaxFn'i ateşlemeden önce 10 saniye beklemek istiyorum. Mümkün mü? – mkizito76

+0

@ user1219415 Yani İLK Çağrınızdan 10 saniye önce beklemek mi istiyorsunuz? Cevabı güncelledim. – gideon

+0

FANTASTIC! Bir kez daha teşekkürler – mkizito76

İlgili konular