我如何制作一个jQuery插件并递归调用它?

时间:2013-10-21 08:04:28

标签: jquery plugins

如何递归调用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);

但除了一次之外它不起作用!

2 个答案:

答案 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)

实施中存在一些问题

  1. setTimeout需要函数引用作为参数
  2. 工作版本可能类似于

    (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);
    

    注意:不要让它像一个完整的插件......只修复现有版本中的一些问题