0

如果我创建这样的脚本,那么它将每 2.5 秒重新加载一次 div。我想要一个仅在有新数据时显示的脚本,如果没有新数据则不必重新加载...

<script type="text/javascript">
    function dispMsg() {
        $("#displayMessage").load('load.php');
        var newscrollHeight = $("#displayMessage").attr("scrollHeight") - 20;
        $("#displayMessage").animate({ scrollTop: newscrollHeight }, 'normal');
    }
    setInterval (dispMsg, 2500);
});
</script>

<div id="displayMessage"></div>

这是load.php

$sql = "SELECT * FROM message ORDER BY id DESC LIMIT 1";
$query = mysql_query($sql);
while ($result = mysql_fetch_array($query)) {
    $id = $result['id'];
    $from = $result['user_01'];
    $to = $result['to_usr'];
    $message = $result['message_01'];
    $date = $result['date_send'];

    echo "<span class='from'> $from </span>" 
      . "<span class='message'> $message </span> <br/>";
}
4

3 回答 3

0

使用$.load()的参数和回调

$.load(url, {param1:value, param2:value}, function(result){ 
    if(result >5){ 
     //do something
    }
)

例子:

<?php

if($_REQUEST['action'] == 'check'){
    if($_REQUEST['lastId'] < 5 ){
        echo $_REQUEST['lastId']+1;
        die;
    }
}

if($_REQUEST['action'] == 'load'){
    echo 'some conntent!';
    die;
}

?>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>    
<script type="text/javascript">
$(document).ready(function(){
    var lastId = 0;
    function dispMsg() { 
        $.get('tmp.php', {action:'check', lastId: lastId}, function(responce){

            if(responce !== 0){
                alert(responce);
               $('#displayMessage').load('tmp.php', {action:'load'});
            }
        });

    }
    setInterval (dispMsg, 2500);
});
</script>

<div id="displayMessage">1</div>
于 2013-07-10T09:27:30.657 回答
0

您可以随每个请求发送最后一个消息 ID。如果查询的最后一条消息大于发送的 id,则发送响应。否则什么都不发送。

function load_messages(){
    var last = $('#messagewindow p:last').attr('id');
    $.ajax({
        url: base_url + "load.php",
        type: "POST",
    data: {
        last: last
    },
        cache: false,
        success: function(html){
          //insert message
        }
    });
}

您可以将 id 作为 HTML 中的 id 属性发送。聊天窗口中的每条消息都作为带有一些消息 ID 的段落发送,例如id="133".

于 2013-07-10T08:35:33.470 回答
0

扩展@Pé de Leão 的解决方案,这里有一些更简单的东西:

<?php
$sql = "SELECT * FROM message ORDER BY id DESC LIMIT 1";
$mysqli = new mysqli("host", "user", "pass");
if ($result = $mysqli->query($sql)) {
    $msg = $result->fetch_assoc();

    if (isset($_REQUEST['last']) && $msg['id'] != $_REQUEST['last']) {
        echo "<span id='${msg['id']}' class='from'>${msg['user_01']}</span>";
    }
}

在客户端:

function dispMsg() {
    var last = $('#displayMessages span.from').attr('id');
    $.get(baseUrl + '/load.php', { last: last }, function(result) {
         if (result) {
             $('#displayMessages').html(result);
         }
    });
}

请注意,这将替换displayMessages.

于 2013-07-10T09:09:50.670 回答