1

我无法<div>使用 jQuery 自动更新它。它本质上是一个聊天功能,每两秒刷新一次页面。我已经尝试了几种变体,但都没有运气,所以完全改写它是非常受欢迎的。

jQuery代码

function updateChat() {
    $.get("chat_data.php", function(data) {
        $("div#chattable").html(data);
    });

    window.setTimeout("updateChat();", 2000);
}

$(document).ready(function() {
    updateChat();
});

这是<div>代码,它从chat_data.php. 这应该是更新:

<div id="chattable">
    <?php include("js/chat_data.php"); ?>
</div>

聊天数据.php

<?php foreach($query->result() as $row):
    echo "<div class='chatrow'>";
    echo "<div class='chattime'>".date("[M.d] g:ia",strtotime($row->time))."</div>";
    echo "<div class='chatnamematch'>[".$row->name."]</div>";
    echo "<div class='chatbody'>".$row->body."</div>";
    echo "</div>";
endforeach; ?>
4

3 回答 3

2

一切看起来都应该有效。$.get 中的 URL 是否需要是“js/chat_data.php”而不是“chat_data.php”?

此外,我会将 php 包含在 div 之外,因为无论如何它都会通过 AJAX 加载。

于 2009-02-25T16:11:32.893 回答
2

您得到的错误Call to a member function result() on a non-object in /var/www/js/chat_data.php on line 1意味着变量$query设置不正确。您说您使用的是 CodeIgniter,是这样,该文件ajax_data.php位于哪个文件夹中?应用程序/控制器?

于 2009-02-25T16:20:32.500 回答
1

一些想法和一个替代代码示例。很难说你的问题出在哪里,所以这些只是一些想法。

  • 您可以将等待移至您的 PHP,而不是使用 javascript 计时器重新执行

  • 尝试使用更简单的 jQuery.load() 方法。

    function updateChat() {
    
     $("#chattable").load("chat_data.php", function() { updateChat(); });
    
    }
    

在 PHP 方面,

  sleep(2); // sleep for two seconds before returning output

效果类似,但简化了一点。在返回输出之前不会调用 updateChat() 函数。

嗯,只是一个想法。不确定它是否是正确的解决方案,但它可以帮助您隔离问题(取出 js 计时器变量)。

于 2009-02-25T16:20:14.793 回答