2015-05-01 1 views
0

Я пытаюсь получить один div на странице php для обновления каждые 5 секунд.Как использовать setInterval(), когда есть параметр?

В HTML у меня есть: EDIT: НОВЫЙ СЦЕНАРИЙ ФУНКЦИЯ

<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>"; 

Дисплей это только блок CSSed без какого-либо контента. Если я просто позвоню get_messages ($ db), все чаты из базы данных загрузятся. Как сделать это обновление автоматически? Спасибо!

EDIT: Имя файла - «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

, вы не можете вызывать функции php из javascript. Чтобы использовать данные/функции из php, вы должны использовать ajax-запрос (например, браузер получить доступ к вашему php-файлу), чтобы получить результат. Подробнее см. Здесь http://labs.jonsuh.com/jquery-ajax-php-json/. Вы можете использовать тот же файл game.php, но вы должны проверить, вызван ли файл ajax или браузером. вы можете добавить GET parametter game.php? ajax и в php проверить if (isset ($ _ GET ['ajax']), тогда вы должны вернуть данные ajax, и только эти данные – vasilenicusor

0

Я предложил бы использовать JQuery $.load, смотрите пример ниже:

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

Вам нужно вернуть хороший HTML из PHP сценария вместо этого, но чище.

+0

Пробовал это, и он не работает ... – swallis1

+0

Что Ошибка 'get_message.php' должна вернуть HTML вместо JSON – Filype

+0

Нет ошибки, данные просто не отображаются/загружаются. – swallis1