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

如何制作jQuery插件并递归调用它?,jquery,plugins,Jquery,Plugins,如何递归调用jQuery插件? 我在main.php中有一个名为poll.js的文件。我制作了一个名为poll的插件,调用order\u provider.php来捕获登录商店的新订单轮询功能应每15秒检查一次是否注册了新订单。我需要递归调用poll。 我制作了如下插件: (function($){ $.fn.poll = function (shopid){ $.getJSON("order_provider.php?looking=all&shopid=

如何递归调用jQuery插件? 我在main.php中有一个名为
poll.js
的文件。我制作了一个名为
poll
的插件,调用
order\u provider.php
来捕获登录商店的新订单<代码>轮询功能应每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);

但除了一次,它不起作用

这是因为
setTimeout
只工作一次,请尝试
setInterval
。 给你

所以我觉得应该是这样的,我还没有测试过。。但也许可以给你一个开始或如何使工作的想法

//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(糟糕的做法),而是一个
输入
字段,隐藏了我们需要的值。。。我希望它能对你有更多的帮助。。
附言我只是在火车上做的,所以我不知道它是否能开箱即用……;)

实施过程中几乎没有问题

  • setTimeout需要一个函数引用作为参数
  • 工作版本可能类似于

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

    注意:不想让它成为一个完整的插件。。。只是修复了现有版本中的一些问题

    我尝试了这段代码,但没有成功,我不知道“shopid”去了哪里?!我需要每隔15秒打一次“shopid”的“poll”!我使用了您的代码并对其进行了测试,但没有找到调用poll函数的方法。此代码导致错误->引用错误:未定义轮询@Saeid My bad,看起来像
    $。getJSON
    fail
    一起处理错误。我们应该在setInterval func中调用poll作为$(this)。poll(shopid)但shopid作为未定义发送!:(@Saeid这是因为它已经被使用过了,我认为最好在它发送ajax调用的同时使用
    setInterval
    。有意义吗?我想我不明白你的意思,但如果我明白了,我应该在ajax完成时调用poll函数,而不是在短时间内!