如果表格很大,我对表中元素的一点 ajax 会中断.如何解决


my little bit of ajax over an element in a table breaks if table is large. how to fix?

我的页面包含由php/mysql生成的多个表。其中一个元素是输入/输出按钮。我把它变成了 ajax'ed,以便每次单击按钮都会更改为打开或关闭图像,而无需重新加载页面。

它就像魅力一样工作!直到它没有。如果一个表或表的组合超过这么多行...它停止工作。但仍然适用于它上面的行。为什么会这样呢?

这是表生成...这发生在多个 PHP 文件中。

<tbody>
<?php while($row = MySQL_fetch_array($result)):
$id = htmlentities($row['id']);
$status = htmlentities($row['status']);
include ("button.php");
?>
<tr>
        <td title="lname" width="100px">
            <div style="width:100px; overflow:hidden;">
                <?php echo(htmlentities($row['last_name'])); ?>
            </div>
        </td>
        <td width="100px">
            <div style="width:100px; overflow:hidden;">
                <?php echo(htmlentities($row['first_name'])); ?>
            </div>
        </td>    
        .
        .
        .
        <td>
        <div style="width:100px; overflow:hidden;">
                <?php echo '<div><div id="r'.$id.'"><div id="test"><img class="rating" id="'.$status.$id.'" src="'.$color.'"><div style="display:none;">'.$status.'</div></div></div></div>';?>
        </div>
        </td>
</tr>
<?php endwhile; ?>

下面是脚本:

<script>
        $(function(){
            $(document).on("click", ".rating", function(){
                var status = $(this).attr("id").substr(0,1);
                var id = $(this).attr("id").substr(1);
                var data = "id="+id+"&status="+status;
                $.ajax({
                    type: "POST",
                    url: "rate.php",
                    data: data,
                    success: function(e){
                    $("#r"+id).html(e);
                }
            })
        });
    });
    </script>

下面是上面的代码中引用的速率.php:

<?php
include ("db.php");
$id = $_POST["id"];
$newstatus = $_POST["status"];
if($newstatus == 0){
    mysql_query("UPDATE users SET status = 1 WHERE id='$id'");
}
else {
    mysql_query("UPDATE users SET status = 0 WHERE id='$id'");
}
include("button.php"); //FILE WITH THE LIKE & DISLIKE BUTTONS AND THE NUMBER OF LIKES & DISLIKES
$list = '<div id="test"><img class="rating" id="'.$q[0].$id.'" src="'.$color.'"><div style="display:none;">'.$q[0].'</div>';
echo $list;
?>

以及上面引用的按钮.php文件:

<?php 
$q = mysql_query("SELECT status FROM users WHERE id='$id'");
$q = mysql_fetch_array($q);
if($q[0]){
    $color = "green.png";
}
else{
    $color = "red.png";
}
?>

所以是的...如果一个表的 MySQL 查询太大,则在一定数量的行数后,输入/输出按钮将停止工作。或者,如果我有多个较小的表,一旦它超过一定的行总数,同样的事情。

帮助?

在注释中进行调试时,意识到使用了重复的 id。ID 在单个页面中必须是唯一的,否则可能会出现意外结果(例如问题中描述的问题)。

要测试重复的 id,请使用属性等于选择器。

console.log($("[id=" + theidtotest + "]").length)

如果你从那一行得到超过1个元素,你就做错了。