忽略以前的ajax请求

时间:2015-03-26 10:59:27

标签: javascript jquery ajax

代码已更新

这是我的js

destroy.js.erb

$('.delete_loop').on('ajax:success', function () {
  $(this).closest('tr').fadeOut();
  var loopNumber = $('.form-loop-number').html()
  $('.form-loop-number').html(loopNumber - 1)
  });

使用rails调用我的ajax:remote =>真正的帮助者

index.html.erb:

= link_to calendar_video_ad_schedule_path(schedule.id), method: :delete, :remote => true, data: { confirm: 'Êtes vous sûr ?' }, :class => 'delete_loop' do
    i.icon-trash style='color:grey; font-size: 1.2em'

当我删除一个项目时,我希望html中的.form-loop-number的编号减少。它第一次工作,但如果我将方法调用两次或更多次,则该数字会减少一次以上。

我第一次删除项目:loopNumber - 1

我第二次删除项目:loopNumber - 2

我第三次删除项目:loopNumber - 3

等...

我的控制器响应sur js格式

控制器:

def destroy
  @schedule = Schedule::VideoAd.find(params[:id])
  @schedule.destroy

  respond_to do |format|
    format.html
    format.js
    end
end

我只想让它每次减少1。我怎样才能做到这一点 ?

2 个答案:

答案 0 :(得分:1)

你的

$('.delete_loop').on('ajax:success', function () {
...
});

事件分配在" delete"期间调用的代码中。操作。每次删除时,都会添加一个新的' ajax:success'事件处理程序所有这些事件处理程序都在后续"删除" s上执行。在

中移动上述事件分配
$(document).ready(function() {
...
});

答案 1 :(得分:0)

不要使用全局ajax:success事件处理程序,而是尝试使用特定ajax调用的成功处理程序。我看不到你的其余代码,但如果有任何其他的ajax,它可能会击中这个处理程序。

function deleteMyStuff(){
    $.ajax({
        url: '/delete-my-stuff/',
        success: function(response) {
            $('.delete_loop').closest('tr').fadeOut();
            var loopNumber = $('.form-loop-number').html();
            $('.form-loop-number').html(loopNumber - 1);
        },
        error: function(XMLHttpRequest, textStatus, errorThrown) {
            alert("Error: " + errorThrown);
        }
    });
}

另外,来自文档:http://api.jquery.com/ajaxSuccess/

  

从jQuery 1.8开始,.ajaxSuccess()方法只应附加到文档。

因此将它附加到.delete_loop元素可能会导致不必要的行为。