尽管点击,计数器只会更新一次

时间:2011-09-30 07:06:25

标签: jquery ajax live

我正在尝试构建一个计数器,网站的管理员用户可以通过单击链接来更新计数器。当用户单击计数器链接时,$ .get将数据发送到mySQL记录并更新记录。然后将该号码发送回Jquery,Jquery更新计数器而不刷新。到目前为止一切正常。

当用户点击多次时会出现问题。 MySQL记录已正确更新,但计数器仅在用户第一次单击链接时更新。这是我的代码:

<div class='counter' id='4592'><a href=''>Counter: 24</a></div>

$.get("jquery.php", { id: $(this).attr('id'), counter: 'increase' }, 
    function(data) {
        $('.counter').replaceWith('<div class="counter" id="' + $(this).attr('id') + '"><a href="">Counter: ' + data + '</a></div>');
    }
);

PHP:

$id = $_GET['id'];
$num = $_GET['counter'];


switch ($num) {
    case 'increase':
        // ---- Before updating the record get the number saved in the database
        $qry = mysql_query("SELECT counter FROM table WHERE id='".$id."'") or die(mysql_error());
        $number = mysql_fetch_array($qry);
        $n = $number['counter'];

        // ---- Increase the counter and update the record
        $a = $n + 1;
        mysql_query("UPDATE table SET counter = '".$a."' WHERE id = '".$id."'");

        // --- Send data back
        echo "Counter: ".$a;
    break;
}

3 个答案:

答案 0 :(得分:2)

默认情况下会缓存

$.get个请求,因此每个后续请求实际上都不会发送到服务器。使用$.ajax请求传递cache: false作为参数,或使用ajaxSetup关闭全局缓存。

答案 1 :(得分:0)

很少有疑问 -
1. $(this).attr('id')可以在回调上运行。你得到了正确的身份证明吗? 2.替换为替换内容。为什么要再次将div添加到计数器?
这应该可以正常工作: -

$('.counter').replaceWith('<a href="">Counter: ' + data + '</a>');

答案 2 :(得分:0)

您应该为缓存设置$ .get jquery方法的默认值:

$.get = function(url, callback) {
    $.ajax({
        async : false,
        type: "GET",
        url: url,
        success: callback,
        cache: true
    });
};

另一种方法是使用它:

$.ajaxSetup({cache : true}); 
$.get(...);
$.ajaxSetup({cache : false});