【问题标题】:Append not working in php/ajax附加在 php/ajax 中不起作用
【发布时间】:2016-05-17 03:46:54
【问题描述】:

我正在使用带有 jQuery 1.7 的聊天框 (http://www.phpclasses.org/blog/package/3213/post/1-Tutorial-on-Creating-an-AJAX-based-Chat-system-in-PHP.html) 的标准示例。每次我提交我都会收到消息

不推荐使用 getPreventDefault()。请改用 defaultPrevented。

输入消息仍然发送到数据库并正确处理,但是“附加”到原始源,因此屏幕上的打印不起作用。我怎样才能使这项工作并防止该消息?我的 main.js 在这里:

var lastTimeID = 0;

  $(document).ready(function() {
    $('#btnSend').click( function() {
      sendChatText();
      $('#chatInput').val("");
    });
    startChat();
  });

  function startChat(){
    setInterval( function() { getChatText(); }, 1000);
  }

  function getChatText() {
    $.ajax({
      type: "GET",
      url: "/taboo/game/refresh.php?lastTimeID=" + lastTimeID
    }).done( function( data )
    {
      var jsonData = JSON.parse(data);
      var jsonLength = jsonData.results.length;
      var html = "";
      for (var i = 0; i < jsonLength; i++) {
        var result = jsonData.results[i];
        html += '<div ' + result.role + '">(' + result.mes_time + ') <b>' + result.username +'</b>: ' + result.message + '</div>';
        lastTimeID = result.messageID;
      }
        $("#reply").append(html);

    });
  }

  function sendChatText(){
    var chatInput = $('#chatInput').val();
    if(chatInput != ""){
      $.ajax({
        type: "GET",
        url: "/taboo/game/submit.php?chattext=" + encodeURIComponent( chatInput )
      });
    } 
  }

这里是第一个 cmets 之后的编辑版本: var lastTimeID = 0;

    $(document).ready(function() {
      $('#btnSend').click( function() {
        sendChatText();
        $('#chatInput').val("");
      });
      startChat();
    });

    function startChat(){
      setInterval( function() { getChatText(); }, 1000);
    }

    function getChatText() {
      $.ajax({
        type: "GET",
        url: "/taboo/game/refresh.php?lastTimeID=" + lastTimeID,
        success: function( data   ){
          var jsonData = JSON.parse(data);
          var jsonLength = jsonData.results.length;
          var html = "";
          for (var i = 0; i < jsonLength; i++) {
            var result = jsonData.results[i];
            html += '<div ' + result.role + '">(' + result.mes_time + ') <b>' + result.username +'</b>: ' + result.message + '</div>';
            lastTimeID = result.messageID;
          }
            $("#reply").append("<p>Hello</p>");
            console.log(html);
            console.log("H");
        }
    });
    }

    function sendChatText(){
      var chatInput = $('#chatInput').val();
      if(chatInput != ""){
        $.ajax({
          type: "GET",
          url: "/taboo/game/submit.php?chattext=" + encodeURIComponent( chatInput )
        });
      } 
    }

这是输入的来源:

                <div class="reply" id="response"></div>
                    <div id="ajaxForm">
                      <input type="text" id="chatInput" /><input type="button" value="Send" id="btnSend" />
                    </div>

这是数据库连接:

      class chatClass
      {
        public static function getRestChatLines($messageID)
        {
          $arr = array();
          $jsonData = '{"results":[';
          include "/Applications/XAMPP/xamppfiles/htdocs/taboo/game/connectToDB.php";
          $_db->query("SET NAMES utf8"); 
          $statement = $_db->prepare("SELECT * FROM messages WHERE message_id > ? and mes_time >= DATE_SUB(NOW(), INTERVAL 1 HOUR)");
          $statement->bindParam('i', $messageID);
          $statement->execute(array($messageID));
            while ($statement->fetch()) {
              $line->message_id = $messageID;
              $line->game_id =$gameID;
              $line->user_name = $username;
              $line->role = $role;
              $line->message = $message;
              $line->ordering = $ordering;
              $line->mes_time = date('H:i:s', strtotime($mes_time));
              $arr[] = json_encode($line);
          }
          $link = null;
          $jsonData .= implode(",", $arr);
          $jsonData .= ']}';
          return $jsonData;
        }

        public static function setChatLines($message, $username, $role, $gameID, $ordering) {
          include "/Applications/XAMPP/xamppfiles/htdocs/taboo/game/connectToDB.php";
          $statement = $_db->prepare( "INSERT INTO messages(message, user_name, role, game_id, $ordering) VALUES(?, ?, ?, ?,)");
          $statement->execute(array($message, $username, $role, $gameID, $ordering));
          $link = null;
        }
      }
    ?>

中间的提交将数据从 main.js(第一个代码)传递到 DB php(就在此之前)。

<?php
      session_start();
      require_once( "/Applications/XAMPP/xamppfiles/htdocs/taboo/game/connectToDB.php" );
      require_once( "/Applications/XAMPP/xamppfiles/htdocs/taboo/game/chatClass.php" );
      $message = htmlspecialchars( $_GET['chattext'] );
      echo $message;
      $username=$_SESSION['username'];
      $ordering = $_SESSION['ordering'];
      ++$ordering; 
      $_SESSION['ordering'] = $ordering;
      chatClass::setChatLines( $message, $username, $_SESSION['role'], $_SESSION['gameID'], $ordering);
    ?>

这是定期更新和检查更新的刷新。

<?php
              require_once( "/Applications/XAMPP/xamppfiles/htdocs/taboo/game/connectToDB.php" );
              require_once( "/Applications/XAMPP/xamppfiles/htdocs/taboo/game/chatClass.php" );
              $message_id = intval( $_GET[ 'lastTimeID' ] );
              $jsonData = chatClass::getRestChatLines( $message_id );
              print $jsonData;
            ?>

这些都是与聊天框相关但不起作用的元素。 在此先感谢您的帮助-我一直在尝试在此论坛和其他论坛中可以找到的所有内容,但没有任何内容可以将我的文本返回给凉亭

【问题讨论】:

  • 使用getPreventDefault()的行在哪里?
  • 我没有使用该方法的行,也没有 import .js 或任何使用该行的东西。
  • 嗯,控制台错误应该提供发生错误的行,不是吗?
  • 我试图更改 jQuery 版本(似乎是一些错误),包括 $(document) 下的方法,使用 return、print、append 和 appendTo 的所有潜在变体但没有停止错误并且没有打印文本。请帮忙...
  • " jquery-1.7.js:3506:" 控制台输出 - 不是很有帮助。

标签: javascript php jquery printing


【解决方案1】:
$("#reply").append("<p>Hello</p>");

这将选择 id="reply" 的元素 但在你的 html 没有id="reply"

你可以通过

$('#response').append("<p>Hello</p>")

这将选择带有id="response" 的标签并附加你好

【讨论】:

  • 感谢您的回复。我也尝试过,现在再次使用您的代码和更改后的 ajax 函数,但它仍然没有输出任何内容。有什么想法吗?
  • 您能否验证getChatText ajax.success 是否被触发,您能否检查以验证是否未附加p 标签?
  • 好的 - 是的,它现在确实发送,但只有普通文本 - 没有 html,不幸的是,在 2 秒的时间间隔内,相同的消息......如果我将它添加到第一个点击功能而不是仅在提交时收到一条消息,它不再起作用;-(我想要做的就是在屏幕上显示输入的消息....请再次帮助我
  • 在您的startChat 中删除setInterval 并在getChatText 中您应该清除#response 的innerHTML 使用它而不是$('#response').html('').append("Insert your html here");
  • 对不起,我再次...我刚刚意识到,通过这种方法,消息只会发送给发送消息的用户,而不是同一会话中的第二个用户...会话是由 game_id 标识...您是否知道如何更改它以使该消息仅显示给会话中的所有用户?当我再次开始刷新并附加到那里时,它会将其发布给页面上的所有用户并重复...
猜你喜欢
  • 2021-03-15
  • 2014-04-16
  • 2015-05-01
  • 2021-07-08
  • 1970-01-01
  • 2021-12-14
  • 1970-01-01
  • 1970-01-01
  • 2017-04-21
相关资源
最近更新 更多