为什么Ajax只适用于最新的帖子


Why does Ajax only work for the newest post?

我想使用Ajax在不刷新的情况下调用PHP页面。

这是我的代码

<?php 

global $db;
$cmd = "SELECT * FROM posts order by date desc";
$result = mysqli_query($db,$cmd);
while ($row = mysqli_fetch_assoc($result)){
    $post_txt = $row['text'];
    $post_image = $row['image'];
    $postid = $row['postid'];
    $date = $row['date'];
    $userid = $row['userid'];
    $new_date=time_elapsed_string($date);

    ?>

    <?php
    global $db;
    $sql = "SELECT * FROM user WHERE id = '$userid'";
    $result2 = mysqli_query($db,$sql);
    while($row2 = mysqli_fetch_assoc($result2)){
        $acountname = $row2['name'];
        $acountlast_name = $row2['lastname'];
    } 
    ?>

<?php

echo"
<div id='postShare'>
    <div class='col-xs-7' id='listPost'>
                <div class='list-group'>    
            <input type='hidden' value='$userid' id='user_id_input_hidden'>     
            <li class=list-group-item text-center'><span class='pull-right'><p><a href='profile.php' id='prof_btn'>$acountname  $acountlast_name</a></p></span>&nbsp;
            <span class='pull-left'><p>$new_date</p></span>
            <hr>
            <center><h5 id='show_post_title'>$post_txt</h5></center> <hr>";?>

我想用Ajax加载profile.php

$(document).ready(function(){
    $('#prof_btn').click(function(){
        var userid = $('#user_id_input_hidden').val();
        var dataString = 'userid=' + userid;
        $.ajax({
          url:'profile.php',
          type:'POST',
          data:dataString,
          success:function(prof){
            $('html').empty();
            $('html').append(prof);
          }
        });
        return false;
    });
});

但它只适用于echo中的最新帖子,不适用于任何帖子。怎么了?

加载配置文件时,添加事件的#prof_btn元素将消失,取而代之的是没有绑定任何事件的新元素。

你有两个选择:

  1. 手动重新应用事件
  2. 使用事件委派将事件委派给不被替换的父元素

在循环内移动回波

global $db;
$sql = "SELECT * FROM user WHERE id = '$userid'";
$result2 = mysqli_query($db, $sql);
while ($row2 = mysqli_fetch_assoc($result2)) {
    $acountname = $row2['name'];
    $acountlast_name = $row2['lastname'];
    echo"
        <div id='postShare'>
        <div class='col-xs-7' id='listPost'>
        <div class='list-group'>    
        <input type='hidden' value='$userid' id='user_id_input_hidden'>     
        <li class=list-group-item text-center'><span class='pull-right'><p><a href='profile.php' id='prof_btn'>$acountname  $acountlast_name</a></p></span>&nbsp;
        <span class='pull-left'><p>$new_date</p></span>
        <hr>
        <center><h5 id='show_post_title'>$post_txt</h5></center> <hr> 
        ";
} 

删除此处的最后一个括号:

while($row2 = mysqli_fetch_assoc($result2)){
    $acountname = $row2['name'];
    $acountlast_name = $row2['lastname'];
---> } 

最后放在这里:

<center><h5 id='show_post_title'>$post_txt</h5></center> <hr>";
--> }?>