【问题标题】:did not show messages in index page未在索引页面中显示消息
【发布时间】:2017-09-12 11:26:35
【问题描述】:

我正在尝试使用 php、mysql 和 ajax 创建小型聊天应用程序。使用 ajax 函数后,输出中未显示消息。但数据正在传输到数据库。

索引页面代码

<?php

  require('includes/core.inc.php');

  if(isset($_POST['send'])){

    if(send_msg($_POST['sender'], $_POST['message'])){
      echo 'Message sent.';
    }else{
      echo 'message faild to sent.';
    }

  }
?>
<!DOCTYPE html>
<html lang="en">
  <head>
    <!--Page title-->
    <title>chat application</title>

    <!--css stylesheet-->
    <link type="text/css" rel="stylesheet" href="public/css/main.css"/>
  </head>
  <body>

    <div id="input">
      <form action="index.php" method="post">
        <lable>Enter name:<input type="text" name="sender"/></lable>
        <lable>Enter message:<input type="text" name="message"/></lable><br/>
        <input type="submit" name="send" value="send message"/>
      </form>
    </div><!--input-->


    <div id="messages">

    </div> <!--Messages-->

<!--JAVASCRIPT-->

  <script type="text/javascript" src="scripts/js/jquery-1.7.2.min.js"></script>
  <script type="text/javascript" src="scripts/js/auto_chat.js"></script>


  </body>
</html>

chat.php

<?php
  require('../../includes/database/connect.db.php');
  require('../../includes/functions/chat.func.php');

  $messages = get_msg();
  foreach($messages as $message){
    echo '<strong>'.$message['sender'].' sent</strong><br/>';
    echo $message['message'].'<br/><br/>';
  }

 ?>

聊天功能

<?php

  function get_msg(){

    $query = "SELECT Sender,Message FROM chat";

    $run = mysql_query($query);

    $messages = array();


    if($run === FALSE) {
      die(mysql_error()); // TODO: better error handling
    }


    while($message = mysql_fetch_assoc($run)){

      $messages[] = array('sender'=>$message['Sender'], 'message'=>$message['Message']);

    }

    return $messages;

  }

  function send_msg($sender, $message){
    if(!empty($sender) && !empty($message)){
      $sender = mysql_real_escape_string($sender);
      $message = mysql_real_escape_string($message);

      $query = "INSERT INTO chat VALUES (null , '{$sender}', '{$message}')";

      if($run = mysql_query($query)){
        return true;
      }else{
        return false;
      }

    }else{
      return false;
    }

  }

?>

我添加的 ajax 部分就是这个。我认为这是问题所在,但我找不到它。我以前没有使用过 jquery 和 ajax。那么有什么前置条件吗?

$(document).ready(function() {
  var interval = setInterval(function() {
    $.ajax({
      url: 'scripts/php/chat.php',
      success: function(data){
        $('#messages').html(data);
      }
    });
  }, 1000);
});

我有数据库连接文件。但没有问题。如果需要,我可以发布它。请帮帮我

【问题讨论】:

  • 当您调试它时,它具体在哪里/如何失败?观察浏览器调试工具中的 AJAX 操作。他们成功了吗?是否以预期的时间间隔向服务器发出 AJAX 请求?服务器的响应是什么?
  • 我是第一次使用 AJAX。如何将ajax添加到浏览器。我正在使用火狐浏览器。没有错误响应。但消息不显示在索引页面中。但是当我发送消息时它会进入数据库。
  • 在 Firefox 中,我想首选的调试工具仍然是 Firebug 插件。添加 Firefox 并使用它来检查 AJAX 代码发出的网络请求。您此时可能只是忽略了一些错误。
  • 在 Firefox 中, 下的开发者工具无需安装任何东西即可使用。
  • 在浏览器中单击鼠标右键,选择“检查”选项,然后选择“控制台”选项卡。对于 Ajax 请求,您将有一个 XHR 条目,您可以打开并查看发送和接收的内容。您还可以从网络选项卡中获取此信息。

标签: php mysql ajax


【解决方案1】:

只需将下面的代码放在index.php 文件中

<?php
error_reporting(0);
$conn = mysql_connect('localhost','root','');
$db = mysql_select_db('test',$conn);
  function send_msg($sender, $message){
    if(!empty($sender) && !empty($message)){
      $sender = mysql_real_escape_string($sender);
      $message = mysql_real_escape_string($message);
      $query = "INSERT INTO chat VALUES (null , '{$sender}', '{$message}')";
      if($run = mysql_query($query)){
        return true;
      }else{
        return false;
      }
    }else{
      return false;
    }
  }
  if(isset($_POST['send'])){
    if(send_msg($_POST['sender'], $_POST['message'])){
      echo 'Message sent.';
    }else{
      echo 'message faild to sent.';
    }
  }
?>
<!DOCTYPE html>
<html lang="en">
  <head>
    <!--Page title-->
    <title>chat application</title>
    <!--css stylesheet-->
    <link type="text/css" rel="stylesheet" href="public/css/main.css"/>
  </head>
  <body>
    <div id="input">
      <form action="" method="post">
        <lable>Enter name:<input type="text" name="sender"/></lable>
        <lable>Enter message:<input type="text" name="message"/></lable><br/>
        <input type="submit" name="send" value="send message"/>
      </form>
    </div><!--input-->
    <div id="messages">
    </div> <!--Messages-->
  </body>
</html>
<script src="https://code.jquery.com/jquery-3.2.1.js"></script>
<script>
$(document).ready(function() {
  var interval = setInterval(function() {
    $.ajax({
      url: 'test1.php',
      success: function(data){
        $('#messages').html(data);
      }
    });
  }, 1000);
});
</script>

并为 ajax 调用创建一个文件test1.php 并放在下面的代码

<?php
error_reporting(0);
$conn = mysql_connect('localhost','root','');
$db = mysql_select_db('test',$conn);
  function get_msg(){
    $query = "SELECT Sender,Message FROM chat";
    $run = mysql_query($query);
    $messages = array();

    if($run === FALSE) {
      die(mysql_error()); // TODO: better error handling
    }

    while($message = mysql_fetch_assoc($run)){
      $messages[] = array('sender'=>$message['Sender'], 'message'=>$message['Message']);
    }
    return $messages;
  }


  $messages = get_msg();
  foreach($messages as $message){
    echo '<strong>'.$message['sender'].' sent</strong><br/>';
    echo $message['message'].'<br/><br/>';
  }

 ?>

以上对我有用。不需要任何其他的js文件。

【讨论】:

  • 请根据您的数据库设置更改数据库连接。
  • 感谢 mahipal。问题出在 j 查询文件上。我创建了另一个尝试过。有效。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-12
  • 1970-01-01
  • 2017-07-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多