如何递归调用jQuery插件?
我在main.php中有一个名为poll.js
的文件。我创建了一个名为poll
的插件,调用order_provider.php
来捕获登录商店的新订单。如果新订单已注册,poll
函数应每15秒检查一次。我需要递归调用poll
。
我制作了这样的插件:
(function($){
$.fn.poll = function (shopid){
$.getJSON("order_provider.php?looking=all&shopid="+shopid, function(data){
// Do Something
}).done(function(){
// Do Something
setTimeout(poll(shopid),15000)
})
}
})(jQuery);
但除了一次之外它不起作用!
答案 0 :(得分:0)
因为setTimeout
只能使用一次,所以请尝试setInterval
。
这是source
所以我认为应该看起来像这样,我没有测试..但也许可以给你一个如何工作的开始或想法
//the shop id it is to check if the users is login...
// this ajax call is used for gettings new items for that client
//set the php value for a hidden field
$(document).ready(function(){
/*
(function($) {
var shopid = document.getElementById("userid").value;
$.fn.poll = function(shopid) {
$.getJSON("order_provider.php?looking=all&shopid=" + shopid, function(data) {}).done(function() {
var shopinterval = setInterval(function(shopid) {
$(this).poll(shopid);
}, 15E3);
}).fail(function(shopid) {
errorhandler(shopid);
});
}
$.fn.errorhandler = function(shopid) {
clearInterval(shopinterval);
//try again
console.log("error");
poll(shopid);
}
})(jQuery);
*/
var shopid = document.getElementById("userid").value;
if(shopid != null || shopid != null || shopid != undefined){
setInterval(function(shopid){
poll(shopid);
}, 15E3);
}
function poll(userId){
$.getJSON("order_provider.php?looking=all&shopid=" + shopid, function(data) {}).done(function() {
var shopinterval = setInterval(function(shopid) {
$(this).poll(shopid);
}, 15E3);
}).fail(function(shopid) {
errorhandler(shopid);
});
}
function errorHandler(userId){
var confirmation=confirm("Press a button");
if (confirmation==true){
clearInterval(shopinterval);
poll(shopid);
}else{
console.log("error");
}
}
});
注意我不确定它是否符合你的意思,但试一试,这也是基于PHP代码输出用户ID,所以不是打电话从php到javascript(糟糕的做法),它希望是一个input
字段,隐藏着我们需要的价值......我希望它可以帮助你更多..
ps ..我刚刚在火车上做过,所以我不知道它是否可以开箱即用......;)
答案 1 :(得分:0)
实施中存在一些问题
工作版本可能类似于
(function ($) {
$.fn.poll = function (shopid) {
function poll() {
$.getJSON("order_provider.php?looking=all&shopid=" + shopid, function (data) {
// Do Something
}).done(function () {
// Do Something
setTimeout(poll, 15000)
})
}
poll();
}
})(jQuery);
注意:不要让它像一个完整的插件......只修复现有版本中的一些问题