2014-10-20 141 views
4

我有一個Ajax調用防止Ajax調用兩次

$('#button1').on('click', function(e){ 
    $.ajax({ 
     url: url, 
     type: 'POST', 
     async: true, 
     dataType: 'json', 
     enctype: 'multipart/form-data', 
     cache: false, 
     success: function(data){ 

     }, 
     error: function(){} 
    }); 
    e.stopImmediatePropagation(); 
    return false; 
}); 

現在,這裏10分鐘後收到響應。所以ajax調用被多次調用。爲什麼會發生這種情況/我們如何確保只調用一次ajax調用?

+3

「現在,這裏的反應是在10分鐘後收到」 - 什麼?你怎麼發射這個電話?提供的代碼不是問題的來源 – Brennan 2014-10-20 21:45:47

+0

它發生在按鈕調用上。更新了代碼。 – user544079 2014-10-20 21:47:50

+0

您的意思是說用戶不止一次地點擊了按鈕,因爲它需要這麼長時間? – showdev 2014-10-20 21:48:50

回答

13

啓用禁用按鈕,另一種方法是使用.one()方法和重新綁定的事件處理程序回調後:

var clickHandler = function(e){ 
    $.ajax({ 
     url: url, 
     type: 'POST', 
     async: true, 
     dataType: 'json', 
     enctype: 'multipart/form-data', 
     cache: false, 
     success: function(data){ 
     $('#button1').one('click', clickHandler); 
     }, 
     error: function(){} 
    }); 
    e.stopImmediatePropagation(); 
    return false; 
} 

$('#button1').one('click', clickHandler); 
+1

+1我喜歡這個選項,感覺優雅 – 2014-10-20 22:18:50

+1

對於symfony 2,它是唯一一個爲我工作的方法:)謝謝 – LedZelkin 2015-05-29 22:48:34

4

按照由布倫南迴答,

$('#button1').on('click', function(e){ 
    $('#button1').attr('disabled', 'disabled'); 
    $.ajax({ 
     url: url, 
     type: 'POST', 
     async: true, 
     dataType: 'json', 
     enctype: 'multipart/form-data', 
     cache: false, 
     success: function(data){ 
     $('#button1').removeAttr('disabled'); 
     }, 
     error: function(){} 
    }); 
    e.stopImmediatePropagation(); 
    return false; 
}); 

這裏的按鈕將被禁用,並將於success

1

我面臨同樣的問題,它的作品時,我設置async: false。 示例代碼將是這樣的

$('#button1').on('click', function(e){ 
    $.ajax({ 
     url: url, 
     type: 'POST', 
     async: false, 
     dataType: 'json', 
     enctype: 'multipart/form-data', 
     cache: false, 
     success: function(data){ 

     }, 
     error: function(){} 
    }); 
}); 
+0

它幫助我很多。 – 2017-07-20 16:00:07