ajax重复先前的请求


                    

我正在使用Codeigntier,并且正在尝试使用 ajax </ code>进行一些操作。 这有点难以解释。</ p>

我有一个控制器“产品”,其方法为“概述”,视图为“ products_overview”。</ p>

这是控制器 </ p>

这是视图 </ p>

我的问题是,当我在此部分的视图中进行ajax调用时:</ p>

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

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

     $ .ajax({
         输入:“ GET”,
         网址:'<?php echo $ current_get_url; ?>',
         成功:功能(结果){
             $('#column-middle')。html(result);
         }
     });

});
</ code> </ pre>

每次我使用它时,ajax调用都会加倍。 还有其他。 产品控制器创建分页链接。 当我来回几次时,我也会进行ajax调用。 假设我做了4次。 然后,当我使用上面的ajax调用时,它将执行之前的4个调用,然后从中开始加倍!</ p>

所以,我有点迷失在这里。 当我在 $('#column-middle')。html(result)</ code>上放置 setTimeout </ code>时,它将执行一次,但是会给出 jQuery </ code>未定义“结果”的错误。</ p>
     </ div>

展开原文

原文

I'm working with codeigntier and i'm trying some stuff with ajax. This is somewhat difficult to explain.

I have a controller Products with a method "overview", and a view "products_overview".

This is the controller

This is the view

My problem is, is when I make the ajax call in the view in this part:

$('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);
        }
    });

});

It doubles the ajax call everytime i use it. And something else. The products controller creates pagination links. When I go back and forth a few times, I also make ajax calls. Let's say I do that 4 times. Then, when I use the above ajax call, it will execute those 4 previous calls and then start doubling from that!

So, i'm kind of lost here. When I put a setTimeout on $('#column-middle').html(result), it will execute once, but then give a jQuery error that "result" is not defined.

2个回答


您应该从 delegate 处理函数中返回 false </ code>以停止事件 起泡,例如:</ p>

  $('body')。delegate('#notification-close','click',function(){
     //处理

     //阻止其他处理程序执行
     返回false;
});
</ code> </ pre>

请参见此处的腔室部分。 您还可以滥用闭包作用域属性来防止调用加倍:</ p>

  var column_middle_working = false;
$('body')。delegate('#notification-close','click',function(){
     如果(column_middle_working)返回;
     column_middle_working = true;
     // 做你该做的

     $ .ajax({
         输入:“ GET”,
         网址:'<?php echo $ current_get_url; ?>',
         成功:功能(结果){
             $('#column-middle')。html(result);
             column_middle_working = false;
         }
     });

});
</ code> </ pre>

但是仍然建议您找到这种行为的真正原因。</ p>
     </ div>

展开原文

原文

You should return false from a delegate handler function to stop event bubbling, e.g.:

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

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

See caveats section here. You can also abuse closure scope properties to prevent call doubling:

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;
        }
    });

});

But still recommend you finding a real reason of this behavior.


您是否尝试添加 undelegate('click')</ code>?</ p>

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

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

     $ .ajax({
         输入:“ GET”,
         网址:'<?php echo $ current_get_url; ?>',
         成功:功能(结果){
             $('#column-middle')。html(result);
         }
     });

});
</ code> </ pre>
     </ div>

展开原文

原文

Have you tried adding 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);
        }
    });

});

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐