我试图在加载php生成的表格中,在不刷新页面的情况下完成Ajax个POST请求.使用XMLHttprequest onload()在不刷新页面的情况下加载PHP表.通过使用onclick按钮触发POST请求,并且POST请求在php生成表内,然后通过Ajax Form Data Serize处理该请求.结果成功完成,但需要双击以覆盖加载函数并处理Ajax POST请求.因此,我来这里问一个问题,我可以一键完成这个过程吗?

这是我的全部代码:

 <?php
require_once "db_conn.php";

$Host_ID = $_GET['Host_ID'];
$sql = "Select * from Chat_List inner join Chat_Room on Chat_List.Room_ID = Chat_Room. Room_ID 
        where Chat_List.Chat_ID = $Host_ID order By Chat_Room.Update_time DESC";
$row = mysqli_query($conn, $sql);

?>

<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<link rel="stylesheet" type="text/css" href="Chat_Search.css">
</head>
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script type="text/javascript">
 
function ChatRoomSearch(){
  const xhttp = new XMLHttpRequest();
  xhttp.onload = function(e){
    document.getElementById("table3").innerHTML = this.responseText;
    //document.getElementById("Check").trigger("Click");
  }

  xhttp.open("GET", "Chat_Search.php?Host_ID="+Host_ID, true);
  xhttp.send();
}
setInterval(function(){
     ChatRoomSearch(); 
  }, 3000);


</script>
<body>
<?php
$Host_ID = $_GET['Host_ID'];
echo"<script> var Host_ID = '$Host_ID';</script>";
?>

<table id = 'table3' border = 1 cellpadding = 10>
<tr>
<th>ID</th>
<th>Friend</th>
<th>Message</th>
<th>Room ID</th>
<th>Action</th>
</tr>
<?php foreach($row as $row):
?>
<tr>
<td><?php 
    if ($row["Invitor"] != $Host_ID){
        echo $row["Invitor"];
    }else{
        echo $row["Host"];
    }
?></td>
<td><?php echo $row["Room_Message"]; ?></td>
<td><?php echo $row["Room_ID"]; ?></td>
<td>
  <?php
  if ($row["status"] == 'confirm' and $row["Invitor"] == $Host_ID){
  ?>
<form id = "form<?php echo $row["Room_ID"]; ?>" action="Chat_Room_Confirm.php">
  <input type="text" name="Room_ID" id="Room_ID<?php echo $row["Room_ID"]; ?>" value="<?php echo $row["Room_ID"]; ?>">
  <input type="text" name="Room_status" id="Room_status<?php echo $row["Room_ID"]; ?>" value="Chat">
  <input type="button" class="myinput" id="myinput<?php echo $row["Room_ID"]; ?>" value="Invite" >
  <script>
$(document).on('click', function(event){
    event.preventDefault();
   $('#myinput<?php echo $row["Room_ID"]; ?>').on ('click' ,function(){
      var form = $('#form<?php echo $row["Room_ID"]; ?>');
      var Room_ID = $('#Room_ID<?php echo $row["Room_ID"]; ?>').val();
      var Room_status = $('#Room_status<?php echo $row["Room_ID"]; ?>').val();
      var formData = form.serialize();
      $.ajax({
         url:form.attr("action"),
         method:"POST",
         data:formData,
         cache:false,
         success:function(){
           alert('Data Send');
         }
      });
   });
   return false;
});
  </script>
</form>
  <?php } ?>
</td>
</tr>
<?php endforeach; ?>
</table>
</body>
</html>

我已经try 了下面的代码,但它不起作用.

$(document).ready(function(){
   $('#myinput<?php echo $row["Room_ID"]; ?>').on ('click' ,function(event){
      event.preventDefault();      
      var form = $('#form<?php echo $row["Room_ID"]; ?>');
      var Room_ID = $('#Room_ID<?php echo $row["Room_ID"]; ?>').val();
      var Room_status = $('#Room_status<?php echo $row["Room_ID"]; ?>').val();
      var formData = form.serialize();
      $.ajax({
         url:form.attr("action"),
         method:"POST",
         data:formData,
         cache:false,
         success:function(){
           alert('Data Send');
         }
      });
   });
   return false;
});

感谢大家关注我的问题.

推荐答案

您的代码中需要进行大量改进.

A)您的脚本打开到SQL Injection Attack.即使是if you are escaping inputs, it's not safe!,您也应该始终在MYSQLI_PDOAPI中使用prepared parameterized statements,而不是将用户提供的值连接到查询中.

B)在循环内处理相同事件的jQuery代码是一个错误,请不要这样做.

C)在$_GET中得到Host_ID之前,不要执行代码.

Here is a sample code:

<!DOCTYPE html>
<html lang="en" dir="ltr">
<head>
<meta charset="utf-8">
<link rel="stylesheet" type="text/css" href="Chat_Search.css">
</head>
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
    <body>
        <?php 
        require_once "db_conn.php";
        $Host_ID = 0;
        if(!empty($_GET['Host_ID'])){

            $Host_ID = $_GET['Host_ID'];
            $stmt = mysqli_prepare($conn, "Select * from Chat_List inner join Chat_Room on Chat_List.Room_ID = Chat_Room. Room_ID 
                    where Chat_List.Chat_ID = ? order By Chat_Room.Update_time DESC");
            mysqli_stmt_bind_param($stmt, "i", $Host_ID);
            mysqli_stmt_execute($stmt);
            $result = $stmt->get_result();

        ?>
        <table id = 'table3' border = 1 cellpadding = 10>
            <tr>
                <th>ID</th>
                <th>Friend</th>
                <th>Message</th>
                <th>Room ID</th>
                <th>Action</th>
            </tr>
            <?php while ($row = $result->fetch_assoc()) {?>
                <tr>
                    <td>
                        <?php if ($row["Invitor"] != $Host_ID){
                                echo $row["Invitor"];
                            }else{
                                echo $row["Host"];
                            }
                        ?>
                    </td>
                    <td><?php echo $row["Room_Message"]; ?></td>
                    <td><?php echo $row["Room_ID"]; ?></td>
                    <td>
                        <?php if ($row["status"] == 'confirm' and $row["Invitor"] == $Host_ID){?>
                            <form id = "form<?php echo $row["Room_ID"]; ?>" action="Chat_Room_Confirm.php">
                                <input type="text" name="Room_ID" id="Room_ID<?php echo $row["Room_ID"]; ?>" value="<?php echo $row["Room_ID"]; ?>">
                                <input type="text" name="Room_status" id="Room_status<?php echo $row["Room_ID"]; ?>" value="Chat">
                                <input type="button" class="myinput" id="myinput<?php echo $row["Room_ID"]; ?>" value="Invite" >
                            </form>
                        <?php } ?>
                    </td>
                </tr>
            <?php } ?>
        </table>
        <?php } ?>
    </body>
</html>
<script>
var Host_ID = "<?php echo $Host_ID;?>";
function ChatRoomSearch(){
    if(Host_ID > 0){
        const xhttp = new XMLHttpRequest();
        xhttp.onload = function(e){
            document.getElementById("table3").innerHTML = this.responseText;
        }

        xhttp.open("GET", "Chat_Search.php?Host_ID="+Host_ID, true);
        xhttp.send();
    }
}

$(document).ready(function(){
    setInterval(function(){
        ChatRoomSearch(); 
    }, 3000);

    $(document).on('click', '.myinput', function (event) {
        event.preventDefault();
        var formData = $(this).closest('form').serialize();
        $.ajax({
            url: $(this).closest('form').attr("action"),
            method: "POST",
            data: formData,
            cache: false,
            success: function () {
                alert('Data Send');
            }
        });
    });
});
</script>

Javascript相关问答推荐

在React中获取数据后,如何避免不必要的组件闪现1秒?

yarn安装一个本地npm包,以便本地包使用main项目的node_modules(ckeditor-duplicated-modules错误)

如何在Obsidian dataview中创建进度条

切换时排序对象数组,切换不起作用

在使用HighChats时如何避免Datatables重新初始化错误?

如何在coCos2d-x中更正此错误

JavaScript是否有多个`unfined`?

Reaction组件在本应被设置隐藏时仍显示

<;img>;标记无法呈现图像

如何在Press上重新启动EXPO-AV视频?

Docent.cloneNode(TRUE)不克隆用户输入

如何为仅有数据可用的点显示X轴标签?

如何找到带有特定文本和测试ID的div?

输入的值的类型脚本array.排序()

如何更改Html元素S的 colored颜色 ,然后将其褪色为原始 colored颜色

需要RTK-在ReactJS中查询多个组件的Mutations 数据

正则表达式以确定给定文本是否不只包含邮箱字符串

在HTML中使用meta标记来指定定制元数据以用于使用JavaScript进行检索是不是一个坏主意?

由于http.get,*ngIf的延迟很大

使用jQuery每隔几秒钟突出显示列表中的不同单词