2010-10-07 81 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