我有以下poll()
功能:
var pollTimeout = 5000;
(function poll(){
setTimeout(function(){
$.ajax({ url: "/ajax/livedata.php", success: function(data){
if (data[0] == 'success'){
// i'm doing some irrelevant updating here
}
poll();
}, dataType: "json"});
}, pollTimeout);
})();
它每5秒执行一次,一切正常。
但是,如何手动执行此功能?例如,我需要在这里执行它:
$("#status-update-form textarea").keyup(function(e){
if (e.keyCode == '13'){
var status = $(this).val();
$.get("/ajax/update-status.php", { 'status' : status },
function(data){
$("#status-update-form textarea").val('').blur();
// <-- I need to execute the poll here, so that
// the status is updated immediatelly after it's
// submitted, not when the poll fires seconds later
},'json'
);
}
});
知道我该怎么办?如果我尝试触发poll(),它表示该函数不存在。
答案 0 :(得分:1)
将您的民意调查转换为常规功能
var pollTimeout = 5000;
function poll(timeout){
return setTimeout(function(){
$.ajax({ url: "/ajax/livedata.php", success: function(data){
if (data[0] == 'success'){
// i'm doing some irrelevant updating here
}
poll();
}, dataType: "json"});
}, timeout);
}
$("#status-update-form textarea").keyup(function(e){
if (e.keyCode == '13'){
var status = $(this).val();
$.get("/ajax/update-status.php", { 'status' : status },
function(data){
$("#status-update-form textarea").val('').blur();
poll(0);
},'json'
);
}
});
答案 1 :(得分:0)
您可以从实际调用的函数中分离超时代码,然后手动或自动调用它。
var pollTimeoutDelay = 5000;
var pollTimeout = null;
function pollNow(){
if (pollTimeout !== null);
clearTimeout(pollTimeout);
pollTimeout = null;
}
// do what you do, then in the callback:
timeout = setTimeout(pollNow, pollTimeoutDelay);
}
然后,您可以随时调用pollNow(),它会执行操作,然后重新设置超时。
答案 2 :(得分:0)
在这种情况下,我不会在函数中使用setTimeout()
。下面的代码确保每次调用poll()
时都会杀死ajax请求(一次启动,每隔5秒和每个keyup事件调用)
var timeout;
var pollTimeout = 5000;
var ajaxCall;
function poll(){
if (null != ajaxCall) {
ajaxCall.abort();
}
ajaxCall = $.ajax({ url: "/ajax/livedata.php", success: function(data){
if (data[0] == 'success'){
// i'm doing some irrelevant updating here
}
poll();
}, dataType: "json"});
}
poll();
timeout = setTimeout(function(){
poll();
}, pollTimeout);
$("#status-update-form textarea").keyup(function(e){
if (e.keyCode == '13'){
var status = $(this).val();
$.get("/ajax/update-status.php", { 'status' : status },
function(data){
$("#status-update-form textarea").val('').blur();
poll();
},'json'
);
}
});