如何从PHP循环中获取正确的onclick ID以进行Ajax调用?

时间:2013-04-16 01:24:43

标签: php mysql ajax onclick

如何从PHP FOR&中获取正确的mysql id WHILE循环组合用于Ajax GET命令?现在当我做一个测试警报时,每个href的onclick会导致最后一个id被警告,而不是正确的id。

   <?php 
    $varRank = 1;
    $pRow = 1;
    $pBlock = 1;
       FOR ($pRow == 1; $pRow < 5; $pRow++){    
            WHILE ($pBlock <= $pRow){

            mysql_select_db($database_cms_test, $cms_test);
            $query = "SELECT * WHERE rank=$varRank";
            $result = mysql_query($query) or die();
            $row = mysql_fetch_array($result);

            $scr = '<script type="text/javascript" src="jquery.min.js"></script>' .
            '   <script type="text/javascript">' .
            '       function runCounter(){' .
            '       var currentID = ' . $row['id'] . ';' .
            '       var currentRank = ' . $row['rank'] . ';' .  
            '       alert(\'the current id is \' + '. $row['id'] .');' .                
            '       $.get("counter5.php?id=' . $row['id'] . '");' .
            '       }' .
            '   </script>';

            echo $scr;

            $onclkHTML = '<a href="#" onclick="runCounter();" id="' .    $row['song_name'] . '">' .
            '<img src="images/glossy.jpg" width="30" height="30" align="absmiddle" hspace="10" /></a>';
            echo $onclkHTML;    

            $pBlock++;
            $varRank++;
            }
            $pBlock = 1;  // reset
        }
    ?>

1 个答案:

答案 0 :(得分:1)

每次循环都会重新定义相同的功能。

既然你正在使用jQuery,为什么不用它来绑定一个点击处理程序呢?为每个链接指定一个类,并使用data-XXX标记将参数与其关联:

$onclkHTML = '<a href="#" class="counter" id="' . $row['song_name'] . ' data-rank=" . $row['rank'] . " data-id=" . $row['id'] . ">' .
        '<img src="images/glossy.jpg" width="30" height="30" align="absmiddle" hspace="10" /></a>';
echo $onclkHTML;    

然后将处理程序绑定到类:

$(function () {
    $(".counter").click(function() {
        var currentId = $(this).data("id");
        var currentRank = $(this).data("rank");
        alert("The current id is " + currentId);
        $.get("counter5.php?id=" + currentId);
    });
});