2013-07-10 52 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一切。

相關問題