0

我想每 3 分钟刷新一次页面。它包含一个表格,其中每一行代表一个帖子的详细信息。

用户可以回复帖子,该通知将显示为带有 1(未读消息数量)的红色气泡。

我正在尝试使用简单的 Jquery轮询技术来实现这一点。但是,我做错了什么,它没有按我的预期工作。

我有一个像这样的html:

<?php
for($posts as $row)
{
if($entity == 'post')
{ $id = $row['id'];?>
    <a href="javascript:void(0)" onclick="push_notification('<?php echo $entity;?>','<?php echo $id;?>')" title="Push Notification">
        <img src="<?php echo(base_url())?>assets/images/icon/arrow_right.png" width="22" height="22" border="0" alt="Push Notification" onload="chat_review('<?php echo $id;?>')"/></a>
    <a href="<?php echo base_url();?>admin/<?php echo $entity;?>/<?php echo $entity;?>_chat/<?php echo $id;?>" title="Chat">
        <div class="ch_comment" id="chatReviewDiv_<?php echo $id;?>"><?php if($row['chat_count']>0){?><div class="notify"><?php echo $row['chat_count'];?></div><?php }?></div>
    </a>
<?php
} }?>

现在这里是 onload 函数:

function chat_review(post_id)
{
    $.post('<?php echo base_url();?>ajax-function', 
        {'data':'chat',
        'id': post_id,
        'action': 'select'},
        function(data) {
            alert(data.id);
            if(data.chatCount > 0)
            {
                $("#chatReviewDiv_"+data.id).clear();
                $("#chatReviewDiv_"+data.id).append("<div class='notify'>"+data.chatCount+"</div>");
            }  // process results here
            setTimeout(chat_review(data.id),50000);
    }, 'json');
}

但是,这会导致 firbug 限制的溢出。 已达到 Firebug 限制

是什么导致了这种突然的行为? 我该如何解决这个问题?该列表应调用 chat_review 函数 20 次(对于 20 个帖子)。然后 3 分钟后,每 20 个帖子将再次调用 chat_review。但目前,chat_review 被无限调用。

4

1 回答 1

0

你使用setTimeout错误的方式。你chat_review立即调用,它会无限调用自己。您应该改为传递函数的引用,或使用额外的function包装器:

function chat_review(post_id)
{
    $.post('<?php echo base_url();?>ajax-function', 
        {'data':'chat',
        'id': post_id,
        'action': 'select'},
        function(data) {
            alert(data.id);
            if(data.chatCount > 0)
            {
                $("#chatReviewDiv_"+data.id).clear();
                $("#chatReviewDiv_"+data.id).append("<div class='notify'>"+data.chatCount+"</div>");
            }  // process results here
            setTimeout(function(){
                chat_review(data.id)
            },50000);
    }, 'json');
}

与 .bind 一起使用

function chat_review(post_id)
{
    $.post('<?php echo base_url();?>ajax-function', 
        {'data':'chat',
        'id': post_id,
        'action': 'select'},
        function(data) {
            alert(data.id);
            if(data.chatCount > 0)
            {
                $("#chatReviewDiv_"+data.id).clear();
                $("#chatReviewDiv_"+data.id).append("<div class='notify'>"+data.chatCount+"</div>");
            }  // process results here
            setTimeout(chat_review.bind('', data.id),50000);
    }, 'json');
}
于 2016-05-17T08:36:59.470 回答