我正在尝试构建一个计数器,网站的管理员用户可以通过单击链接来更新计数器。当用户单击计数器链接时,$ .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;
}
答案 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});