我在页面中每隔一秒打电话 ajax 这里服务器页面返回随机生成的数字,使用此数字(转换为秒)我触发 ajax success <中的另一项功能< / strong> .it正常工作
我的问题
假设随机数= 5 表示触发()函数,使用 setTimeout 在5秒后调用 ,但是rember ajax调用每1秒触发一次,因此触发函数也会调用很多次。
我想让 ajax调用等待直到触发函数执行。这意味着我想暂停那个ajax调用,直到恢复后5秒
我该怎么做?
我的编码
//this ajax is called every minute
$.ajax({
type: "POST",
url: 'serverpage',
data: ({pid:1}),
success: function(msg) {
var array = msg.split('/');
if(array[0]==1){
setTimeout(function() { trigger(msg); },array[1]+'000');
}
}
});
//and my trigger function
function trigger(value)
{
alert("i am triggered !");
}
服务器响应可能
1/2 或 1/5 或 1/10 或 1/1
此处1 / 3(此转换为秒数)
答案 0 :(得分:3)
看起来您应该在触发器函数或错误回调中触发ajax调用。在页面就绪时触发一次,然后在调用成功函数时触发它。
function ajaxCall() {
$.ajax({
type: "POST",
url: 'serverpage',
data: ({pid:1}),
success: function(msg) {
var array = msg.split('/');
if(array[0]==1){
setTimeout(function() {
trigger(msg);
ajaxCall();
}, parseInt(array[1])*1000);
}
},
error: function() {
setTimeout(ajaxCall, 1000);
}
});
}
$(ajaxCall);
注意:您应该使用一些json而不是自定义数据格式“1/3”进行回复。像“{success:1,delay:3}”这样的东西会更加可靠。
答案 1 :(得分:0)
你可以从你的'success'回调函数中递归调用你的ajax函数,或者在你的情况下,更好的是来自触发函数。
答案 2 :(得分:0)
不是在计时器中调用AJAX,而是在每次执行trigger
函数后调用它。
//and my trigger function
function trigger(value)
{
alert("i am triggered !");
MyAjaxFunction();
}
你必须在页面加载时调用一次:
$(document).ready(function(){
MyAjaxFunction();
});