2010-10-07 102 views
0

我有一个4状态按钮。我想知道如何延迟执行我的ajax请求,以便在最后只有一个请求...4态按钮(带.toggle())和每个状态下延迟的Ajax

我的意思是,如果我按下按钮两次,我不想执行第一个ajax请求,但只有第二个特定的超时后。

$('.btn_mark_erreur').toggle(
     function(){ 
//State 1 
      var id_erreur = $(this).parent().attr('erreur_num'); 
      $(this).attr('title','Erreur réglée'); 
      $(this).children('img').attr('src','img/erreur_ok.png'); 


      setTimeout(function(){ 

       $.ajax({ 
        type: 'POST', 
        url: "", 
        dataType: ($.browser.msie) ? "text" : "xml", 
        data: "a=maj_statut&data="+donnees , 
        succes : function(data) { 
        console.log(data);} 

       }); 

      },1000); 

     }, 
     function(){ 
//State 2 
      var id_erreur = $(this).parent().attr('erreur_num'); 
      $(this).attr('title','Erreur en cours'); 
      $(this).children('img').attr('src','img/erreur_encours.png'); 

      setTimeout(function(){ 

       $.ajax({ 
        type: 'POST', 
        url: "", 
        dataType: ($.browser.msie) ? "text" : "xml", 
        data: "a=maj_statut&data="+donnees , 
        succes : function(data) { 
        console.log(data);} 

       }); 

      },1000); 

     }, 
     function(){ 
//State 3 
      var id_erreur = $(this).parent().attr('erreur_num'); 
      $(this).attr('title','Problème sur cette erreur'); 
      $(this).children('img').attr('src','img/erreur_nok.png'); 


      setTimeout(function(){ 

       $.ajax({ 
        type: 'POST', 
        url: "", 
        dataType: ($.browser.msie) ? "text" : "xml", 
        data: "a=maj_statut&data="+donnees , 
        succes : function(data) { 
        console.log(data);} 

       }); 

      },1000); 
     }, 
     function(){ 
//State 0 
      var id_erreur = $(this).parent().attr('erreur_num'); 
      $(this).attr('title','Marquer comme...'); 
      $(this).children('img').attr('src','img/erreur_statut.png'); 




      setTimeout(function(){ 

       $.ajax({ 
        type: 'POST', 
        url: "", 
        dataType: ($.browser.msie) ? "text" : "xml", 
        data: "a=maj_statut&data="+donnees , 
        succes : function(data) { 
        console.log(data);} 

       }); 

      },1000); 


     } 
    ); 

此代码不起作用,我已收到每个州的请求。

感谢您的帮助!

回答

0

setTimeout返回值 - 定时器的标识符。您可以将该值传递给clearTimeout以取消定时器。例如:

var timers = new Array(null, null, null, null); 
function cancelRequestsUpTo(n) { 
    for (int i = 0; i <= n; ++i) 
     if (timers[i] != null) clearTimeout(timers[i]); 
} 

$("#btn_mark_error").toggle(function() { 
    //... 
    timers[0] = setTimeout(function() { $.ajax(...); }, 1000); 
}, 
function() { 
    timers[1] = ...; 
    cancelRequestsUpTo(0); 
}, 
.... 
); 

注意,一旦$.ajax实际执行也没办法(至少没有办法,我知道的),您可以取消已暂停的请求。我建议的只是取消你已经设置的定时器。

+0

谢谢,我会尽力的! – Franquis 2010-10-07 13:30:02

+0

完美的作品! – Franquis 2010-10-07 13:47:41