2015-05-01 70 views
0

我想在php頁面上獲得一個div,每5秒刷新一次。如何在有參數時使用setInterval()?

在HTML我有:編輯:新的腳本功能

<script> 
    $(document).ready(function(){ 
     var callAjax = function(){ 
      $.ajax({ 
       method:'get', 
       url:'game.php', 
       success:function(data){ 
        $("#read_chat").html(data); 
       } 
      }); 
     } 
     setInterval(callAjax, 5000); 
    }); 
</script> 

和函數(在PHP塊)我試圖刷新爲:

echo" <div class='read_chat' >"; 
    function get_messages($db){ 
     //get messages 
     $get_m = "select user_name, message, time, character_name from Chat NATURAL JOIN User LEFT OUTER NATURAL JOIN Character where Chat.game_id =".$_SESSION[game_id]." ORDER BY Chat.chat_id;"; 
     $messages = $db->query($get_m); 

     //display messages 
     foreach ($messages as $row) { 
      //display each message in row 
      if ($row['character_name'] == NULL){ 
       echo "<div class='left'>" . $row['user_name'] . ": </div>"; 
      } 
      else { 
       echo "<div class='left'>" . $row['character_name'] . ": </div>"; 
      } 
      echo "<div class='center'>" . $row['message'] . "</div>"; 
      echo "<div class='right'>" . $row['time'] . "</div>"; 
     } 
    } 
echo "</div>"; 

的這種顯示器是隻有沒有任何內容的CSS塊。如果我只是調用get_messages($ db)加載數據庫的所有聊天。 如何讓這個div自動刷新?謝謝!

編輯: 該文件的名稱是「game.php」,PHP函數是「get_messages()」。

因爲我看了看記錄: http://www.elated.com/articles/javascript-timers-with-settimeout-and-setinterval/

Pass parameters in setInterval function

+0

您應該使用ajax來更新您的div,使用來自php的新數據 – vasilenicusor

+3

'get_messages'是一個PHP函數。 PHP首先運行,然後用CSS,HTML,JS呈現。 JS不執行PHP函數。爲了讓這個工作使用AJAX。 – Class

回答

0

的Javascript

setTimeout(function(){ 
    $.ajax({url: "get_message.php", success: function(result){ 
     var num_records = result.length, 
      i, 
      content; 
      for(i=0;i<num_records;i++){ 
       if (result[i]['character_name'] !== null){ 
        content += "<div class='left'>" + result[i]['character_name'] +": </div>"; 
       } 
       else{ 
        content += "<div class='left'>" + result[i]['user_name'] +": </div>"; 
       } 
       content += "<div class='center'>" + result[i]['message'] + "</div><div class='right'>" + result[i]['time'] + "</div>"; 
      } 

     $('.read_chat').html(content); 

    }}); 
}, 5000); 

get_message.php

$get_m = "select user_name, message, time, character_name from Chat NATURAL JOIN User LEFT OUTER NATURAL JOIN Character where Chat.game_id =".$_SESSION[game_id]." ORDER BY Chat.chat_id;"; 
$messages = $db->query($get_m); 
$response = array(); 
foreach ($messages as $row) { 
    $response[] = $row; 
} 
echo json_encode($response); 
+0

謝謝!如果該文件不是'get_message.php'會怎麼樣?函數是get_message(),但文件名是game.php – swallis1

+0

你不能從javascript調用php函數。要使用php中的數據/函數,您必須使用ajax請求(如瀏覽器訪問您的php文件)來獲得結果。請看這裏更詳細的例子http://labs.jonsuh.com/jquery-ajax-php-json/。你可以使用相同的文件game.php,但你必須檢查文件是否被Ajax或瀏覽器調用。你可以添加GET參數game.php?ajax和在php中檢查是否(isset($ _ GET ['ajax'])那麼你應該返回ajax數據,只有這個數據 – vasilenicusor

0

我建議使用jQuery $.load,見下面的例子:

setTimeout(function(){ 
    $('.read_chat').load('get_message.php'); 
}, 5000); 

你需要從PHP腳本返回HTML不錯代替,但它的清潔。

+0

試過,它不工作... – swallis1

+0

什麼錯誤你得到了嗎?文件'get_message.php'需要返回HTML而不是JSON – Filype

+0

沒有錯誤,數據只是沒有出現/加載。 – swallis1