如何停止点击运行超时jquery函数并运行新函数?
问题描述:
我想每5秒钟用ajax调用更新视图。我以下面的方式完成了它。如何停止点击运行超时jquery函数并运行新函数?
function getData(a, b, c) {
$.ajax({
url : 'url',
success : function(data) {
$("#result").html(data);
setTimeout(getData, 5000, a, b, c);
}
})
}
$(document).ready(function() {
getData(1, 2, 3);
});
$('.btn').click(function(){
getData(4,5,6);
});
但是,通过这种方式尽可能多的功能正在运行尽可能多的点击。
我需要停止前一个并运行新的或更改运行功能的参数。
答
使用Ajax abort()
功能停止请求按钮被点击时,开始一个新的...
在这里我有一个例子给你,如何中止工程...看看代码,并尝试这个...
<script>
var prev_request = false;
var xhr;
var myTimeoutReq;
//var myCondition = true,
function getData(a, b,c,myCondition)
{
if(prev_request == true)
{
xhr.abort();
}
xhr = $.ajax({
url : 'url',
beforeSend: function(xhr) {
prev_request = true;
},
success : function(data) {
$("#result").html(data);
if(myCondition == true)
{
myTimeoutReq = setTimeout(getData, 5000, a, b, c,true);
}
else
{
clearTimeout(myTimeoutReq);
}
},
complete: function(xhr) {
prev_request = false;
}
});
}
$(document).ready(function() {
getData(1, 2, 3, true);
});
$('.btn').click(function(){
getData(4,5,6,false);
});
</script>
答
您需要使用clearTimeout才能完成先前的超时,因为您需要先指定返回的对象setTimeout
。声明一个全局对象来分配超时对象,以便可以通过其他函数进行评估。
指定超时对象
someGlobalTimeoutObject = setTimeout(getData, 5000, a, b, c);
结算超时对象
clearTimeout(someGlobalTimeoutObject);
答
function getData(a, b, c) {
if(detData.ajax) {
detData.ajax.abort();
clearTimeout(getData);
}
detData.ajax = $.ajax({
url : 'url',
success : function(data) {
$("#result").html(data);
setTimeout(getData, 5000, a, b, c);
}
});
}
使用'clearTimeout()'停止你的setTimeout函数的执行.. –
我试着这但不能捕捉正在运行的事件。 clearTimeout(???) – CoderBoy
您可以在ajax调用中设置更多参数。 'async:false'。它会逐一打出每个电话。 – Ali