繁体   English   中英

如何通过 AJAX 从 PHP 获取变量值到 Java Script?

[英]How to get variable value from PHP to Java Script via AJAX?

我创建了一个聊天网站。 我将带有 AJAX 的消息发送到 PHP 和 MySql 数据库。 使用每秒运行的 AJAX 获取消息。 但这导致获取所有消息(从开始到结束)。 我带来了一个解决方案,我将最后一条消息 ID 传递给 AJAX/JAVA SCRIPT,然后只获取比这更多的消息。

这是 Java Script/AJAX

function fetchdata(){
var cuser = //id of the current user 
var ouser = //id of the other user
 $.ajax({
  url: "messagesprocess.php",
  type: "POST",
  data : {cuser:cuser, ouser:ouser},
  success: function(read){
    $("#readarea").html(read);
  }
 });
}

这是获取消息的 PHP 代码:

$sql = "SELECT id, fromid,message,toid FROM messages WHERE (fromid={$_POST['cuser']} AND toid={$_POST['ouser']}) OR (fromid={$_POST['ouser']} AND toid={$_POST['cuser']})";
$result = mysqli_query($conn, $sql) or ("Query Failed");

while($row=mysqli_fetch_assoc($result)){
  if($row["fromid"]==$_POST['cuser']){
    echo "<div class='cuser'>".$row["message"]."</div>";
  }else{
    echo "<div class='ouser'>".$row["message"]."</div>";
  }
}

在这里,我想从 PHP 中获取 Java Script 函数中的 ID(消息),并将其用作一个变量来获取比它更多的消息。

您应该从 PHP 返回 JSON,而不是 HTML。 这样您就可以返回一个具有 ID、消息等属性的对象。然后您可以使用 Javascript 来存储最新的 ID,并将消息放入您的页面中,并带有相关的 HTML。

像这样的东西:

PHP:

$sql = "SELECT id, fromid,message,toid FROM messages WHERE (fromid={$_POST['cuser']} AND toid={$_POST['ouser']}) OR (fromid={$_POST['ouser']} AND toid={$_POST['cuser']})";
if (!empty($_POST["lastid"]) $sql .= " AND id > {$_POST['lastid']}";

$result = mysqli_query($conn, $sql) or ("Query Failed");
$messages = array();

while($row=mysqli_fetch_assoc($result)){
  $messages[] = $row;
}

echo json_encode($messages);

JS:

//make this global so it persists beyond each call to fetchdata
var lastMessageID = null;

function fetchdata()
{
  var cuser = //id of the current user 
  var ouser = //id of the other user
  $.ajax({
    url: "messagesprocess.php",
    type: "POST",
    dataType: "json",
    data : { cuser: cuser, ouser: ouser, lastid: lastMessageID },
    success: function(read) {
      for (var i = 0; i < read.length; i++)
      {
        var className = "ouser";
        if (read[i].fromid == cuser) classname = "cuser";

        $("#readarea").append("<div class='" + className + "'>" + read[i].message + "</div>");
        lastMessageID = read[i].id;
      }
    }
 });
}

PS也请注意关于SQL注入的评论并紧急修复您的查询代码。 为了简洁起见,我没有在这里做,但不能忽略它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM