jQuery循环只适用于最后一行


jQuery looping only works on last row

我试图在MySQL表中的每一行上每秒使用jQuery显示投标项目的状态结果,但只返回表的最后一行的结果。

<?php
$query = "SELECT item, description, price, imageData, status, username, item_id FROM items"; 
$result = mysql_query($query) or die(mysql_error());
$z=0;
while($row = mysql_fetch_array($result))
{   
    //echo other columns here//
    echo "<td><div id=status$z></div></td>";
    ?>
    <script type=text/javascript>
        function updatestatus(itemnum)
        {
            var url="updatestatus.php?auc=<?php echo $row['item_id']; ?>";
            jQuery('#status' + itemnum).load(url);  
        }
        setInterval("updatestatus(<? echo $z?>)", 1000);
    </script>
    <?   
    $z++;
}
?>

当我在浏览器中查看源代码时,每行的#status和auc的值都是正确的。我在这里错过了什么?

这是updatestatus.php 的代码

<?php
    session_start();
    require_once("connect.php");
    $id = $_GET['auc'];
    $getstatus = mysql_query("SELECT status FROM items WHERE item_id = '$id'  ");
    $row = mysql_fetch_array($getstatus);
    echo"$row[status]";
?>

除了创建对updatestatus()函数的多个引用之外,一切看起来都很好。

在Javascript中,如果创建多个同名函数,调用它们只会导致其中一个函数运行,通常是第一个或最后一个(取决于实现),因此需要在这些函数中运行的所有代码都需要放在一个函数体中。

如果您决定使用您创建的代码,则需要将所有这些更新调用放入一个函数体中。有更好的方法来实现你所需要的,但用你创建的代码来实现,这可能会更好:

<?php
    $query = "SELECT item, description, price, imageData, status, username, item_id FROM items";
    $result = mysql_query($query) or die(mysql_error());
    $javascript = "";
    $z=0;
    while($row = mysql_fetch_array($result))
    {
        //echo other columns here//
        echo "<td><div id=status$z></div></td>";
        // build the javascript to be put in the function later over here...
        $javascript .= "jQuery('#status". $z ."').load('updatestatus.php?auc=". $row['item_id'] ."');";
        $z++;
    }
?>

然后在页面下方创建javascript(稍作修改):

<script type=text/javascript>
    function updatestatus()
    {
        <?php echo $javascript; ?>
    }
    setInterval(updatestatus, 1000);
</script>

因此,您基本上是在构建函数中所需的Javascript,在函数体内部进行回显,然后设置间隔,在这种情况下,每秒钟都会调用所有代码。

正如我所说,肯定有更有效的方法来实现你想要做的事情,但这现在应该很好。我希望这是有道理的,但如果你需要澄清任何事情,请告诉我!:)

我看不出您在使用增量填充数据。这应该是向页面添加内容还是替换内容?从外观上看,它只显示一个项目,然后用下一个项目替换该项目,直到完成为止,这就是为什么只显示最后一行。

或者。。。

jquery更新没有被提供$i变量。。将功能更改为

函数更新状态(itemnum){

然后jquery回显到jquery('#status'+itemnum).load(url);

然后你可以添加点击/或任何包含数字的内容onclick='更新状态("1")'

另一方面,你可能需要将项目的总数传递给函数,然后创建一个if循环(没有经过测试,但我希望你能得到这个想法)

 function updatestatus(numitems) {
    var url = "";
    var itemID = "";
    for (i = 1; i <= numitems; i++) {
        itemid = getElementById('#status'+numitems).getAttribute("itemID")
        url="updatestatus.php?auc="+itemID;
        jQuery('#status'+numitems).load(url);    
    }
 }
setInterval("updatestatus()", 1000);

PHP创建的"#status1"的html元素应该如下所示:

<div id="status1" itemid="23455">
</div>