【发布时间】:2020-09-14 00:54:21
【问题描述】:
我正在使用jQuery.get 执行 AJAX 请求。当用户点击<a>时,我通过jQuery.get向服务器发送请求,然后更新<div id='aaa'>ajax call back here</a>;
但是,当用户点击<a>非常快时,返回数据比点击慢,而且<div id ='aaa'></a>与数据库中存储的不匹配。
例如<div id='aaa'>10</div>,当用户点击 1 次时为 -1。用户点击了5次,#aaa应该是<div id='aaa'>5</div>,但是由于用户点击非常快,所以div显示<div id='aaa'>8</div>。服务器数据库已更新为5,当用户再点击1次时,<div id='aaa'>8</div>将变为<div id='aaa'>4</a>,因为服务器端是5。
我知道这是关于 AJAX 网络请求将需要一些有限的时间。
那么,我的函数是否有可能等到jQuery.get 完成并完成,然后才能再次单击/处理。我已经尝试了下面的编码,但上面提到的仍然是同样的问题。
var isPending = false
function fastbtn(sid, t) {
if (isPending)
return;
goodget('', 'plugin.php?id=ttt&do=realland&ac=' + sid + '&click=true');
}
function goodget(url, rid) {
isPending = true;
jQuery.get(url, function(data, status) {
ajaxget(rid); //this ajaxget is my program core template language, ajaxget(url,WaitId), return as XML format;
})
.done(function() { // <--only fires on success
//alert('ok2');
})
.fail(function() { // <-- only fires on error
})
.always(function() { // <-- this always fires
isPending = false;
});
}
<a href="javascript:;" onclick="fastbtn('watering')">some div ...</a>
你会看到编号在跳跃..
【问题讨论】:
-
可以在调用
fastbtn()函数时禁用锚元素,然后在AJAX结束时重新启用它。 -
我在尝试这个,但是如果用户点击速度很快,因为
onclick已经变成空白,那么<a onclick>在我刷新网页之前无法点击。<a href="javascript:;" id="watering" onclick="fastbtn('watering');">,<script> function fastbtn(sid, t){ jQuery('#watering').attr('onclick',''); ajaxget('plugin.php?id={$jn}&do=realland&ac='+sid+'&formhash={FORMHASH}','aaa'); }</script> -
你也可以用jQuery定义
onclick,HTML不是必须的:$(document).on('click', elem, function() { if (ajaxPending) { return; } else { fastbtn(args) } })
标签: javascript html jquery ajax