ajax重复之前的请求

时间:2011-09-11 10:21:40

标签: php ajax codeigniter

我正在使用codeigntier,我正在尝试ajax的一些内容。这有点难以解释。

我有一个带有方法“概述”的控制器产品,以及一个视图“products_overview”。

This is the controller

This is the view

我的问题是,当我在这一部分的视图中进行ajax调用时:

$('body').delegate('#notification-close', 'click', function(){
    $('#notification').fadeOut(200, function(){
        $('#notification').remove();
    });

    $('#blanket').fadeOut(200).remove();

    $.ajax({
        type: 'GET',
        url: '<?php echo $current_get_url; ?>',
        success : function (result) {
            $('#column-middle').html(result);
        }
    });

});

每当我使用它时,它会将ajax调用加倍。还有别的。产品控制器创建分页链接。当我来回走几次时,我也会进行ajax调用。假设我这样做了4次。然后,当我使用上面的ajax调用时,它将执行那4个先前的调用,然后从那里开始加倍!

所以,我有点迷失在这里。当我在setTimeout上放置$('#column-middle').html(result)时,它会执行一次,但会出现jQuery错误,但未定义“结果”。

2 个答案:

答案 0 :(得分:0)

您应该从delegate处理程序函数返回false以停止事件冒泡,例如:

$('body').delegate('#notification-close', 'click', function(){
    // processing

    // stop further handlers from executing
    return false;
});

caveats section here。您还可以滥用闭包范围属性以防止调用加倍:

var column_middle_working = false;
$('body').delegate('#notification-close', 'click', function(){
    if (column_middle_working) return;
    column_middle_working = true;
    // do what you do

    $.ajax({
        type: 'GET',
        url: '<?php echo $current_get_url; ?>',
        success : function (result) {
            $('#column-middle').html(result);
            column_middle_working = false;
        }
    });

});

但仍然建议你找到这种行为的真正原因。

答案 1 :(得分:0)

您是否尝试过添加undelegate('click')

$('body').undelegate('click').delegate('#notification-close', 'click', function(){
    $('#notification').fadeOut(200, function(){
        $('#notification').remove();
    });

    $('#blanket').fadeOut(200).remove();

    $.ajax({
        type: 'GET',
        url: '<?php echo $current_get_url; ?>',
        success : function (result) {
            $('#column-middle').html(result);
        }
    });

});