我正在使用codeigntier,我正在尝试ajax
的一些内容。这有点难以解释。
我有一个带有方法“概述”的控制器产品,以及一个视图“products_overview”。
我的问题是,当我在这一部分的视图中进行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
错误,但未定义“结果”。
答案 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);
}
});
});