2013-07-10 53 views
0

如果我创建了这样的脚本,那么它将每2.5秒重新加载一次div。我想一个脚本,只显示如果有新的数据,如果没有新的数据它没有重装...只有有新数据时才能重新加载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/>"; 
} 
+2

mysql_ *功能已被弃用更好地利用库MySQLi的/ PDO – DarkBee

+0

我建议你用'date_send'排序而不是'id'。这给你一个防弹的解决方案,总是让它们按照日期顺序排列。 – Eric

回答

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

您可以在您的HTML中发送id作为id属性。聊天窗口中的每条消息均以段落形式发送,并带有一些消息ID,如id="133"

+0

客户端如何知道该ID? – mabi

+0

我刚更新了我的答案。 (我删除了之前说过的内容,因为它实际上是在跨越标签内发送用户id,这超出了你真正要求的范围。从我看过这段代码以来已经有一段时间了。) –

0

扩大对@Pé德·莱昂的解决方案,这里的东西更简单:

<?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一切。

相关问题