如何自动刷新我的php聊天脚本?

时间:2013-10-28 22:06:32

标签: javascript php html mysql

我无法在更改mysql数据时让我的php聊天脚本自动刷新。我已经做了很多研究,似乎很多其他人的解决方案比我需要的更复杂(我想要一些非常基础的东西)。

我不知道任何javascript,如果涉及到js,我们将不胜感激。

这是我创建的php脚本。它正在发挥作用(至少对我而言)。         

    include 'connect2.php';
    echo "
            Enter a Message:
            <form method=post action='' name=chat>
            <input type=text name=message>
            <input type=submit name=chat value=Submit>
            </form>
    ";

    if (isset($_POST['chat'])) {
    $message = $_POST['message'];
    mysql_query("INSERT INTO chat set message='$message',user='$_SESSION[username]'");
    }

    $sql = "select * from chat order by id desc limit 15";
    $result = mysql_query($sql) or die ("An error has occured with in the database.");

    while ($data = mysql_fetch_assoc($result)) {
    $db_message = $data['message'];
    $db_user = $data['user'];
    echo "$db_user : $db_message <br>";
    }

    ?>

任何帮助将不胜感激,谢谢! :)

2 个答案:

答案 0 :(得分:0)

您可以使用setIntervaljQuery库ajax​​函数来检查它。

例如,使用jQuery非常简单:

$(document).ready(function() {
  // check once in five seconds
  setInterval(function() {
    $.get('/script.php', {do: 'new_messages'}, function(response) {
      if(response == 1) {
        window.location.reload();
      }
    });
  }, 5000); 
});

在服务器上的某个地方:

if(isset($_GET['do']) && $_GET['do'] == 'new_messages') {
  // some your code that detects if there's any new messages, and sets
  // $there_are_new_messages to true, if there's any
  ...
  if($there_are_new_messages) {
     echo 1; 

     exit; // avoid further output
  }
}

请记住,要实现这一点,您需要确保在ajax阻止之前没有输出,因为您可能会遇到意外结果。

还要考虑使用输出根本不是一个很好的做法,以显示您的脚本一切正常。更好的方法是使用相应的响应代码设置HTTP标头。

答案 1 :(得分:0)

在你的情况下执行此操作的最佳方法可能是使用Ajax(和jQuery)并每隔X秒刷新一次。

Ready Handler- http://api.jquery.com/ready/

Javascript Timer- http://www.w3schools.com/js/js_timing.asp

Ajax请求 - http://api.jquery.com/jQuery.post/

PHP json_encode- http://php.net/manual/en/function.json-encode.php

$( document ).ready(function() { //set up refresh timer on page load
    var refreshTimer = setInterval(function(){refreshMessages()},5000); //creates timer to request every 5 seconds
});

function refreshMessages(){
    $.post( "getMessages.php", function( data ) { //fire ajax post request
        alert("Got messages: " + data); // this just alerts the data when the request is done, you'll probably want to format/print
    });
}

在getMessages.php方面,您需要通常的方式从数据库中提取消息。在这种情况下,json编码您的php消息数组将是一种简单的方法来迭代返回的对象。

<?php
$messages = // get messages array from database
echo json_encode($messages);
?>