在单个页面应用程序上工作,并且我目前正在构建一个JQuery,ajax函数,以完成所有调用。

对于典型的页面,我可能会调用3个Ajax。我的想法是,如果用户互联网出去将这些ajax调用保持在一个数组中。然后做一个计时器,并继续检查用户是否有互联网。一旦他们上网,就可以打电话。因此,当用户处于脱机状态(检查互联网除外)并且一旦其重新联机后便不会执行任何操作,因此不会运行任何呼叫。所以在我的beforeSend中,我有这个。

beforeSend : function($xhr)
{
    self.ajaxPool.push($xhr);

    if(!self.validateConnection())
    {
        console.log(self.ajaxPool);
    }
}


所以我的问题是,当我重新获得连接,并遍历我的数组到每个$xhr对象时,我可以在上面调用什么函数,说:“嘿,你现在应该做什么?”?例如$xhr.complete()?我已经在池上做了一个控制台日志,可以在连接断开时查看对象,但是看起来没有任何功能可以解决问题。

最佳答案

我会完全放弃beforeSend,因为无论如何您都在使用游泳池,并且要做类似的事情...

//where you want to make your initial request somewhere in code
//do this INSTEAD of calling $.ajax(options)
ajaxPool.push(options);

//an interval to handle the queue
setInterval(function(){
    //nothing in the pool so do nothing
    if(ajaxPool.length < 1) return;
    //not online so don't try to send
    if(!validateConnection()) return;
    //hey we're online lets make the ajax request
    doAjax(ajaxPool.shift());
},200);

function doAjax(options){
    //add call backs since you seem to be using a single call back
    options.complete=function(data){ ... };

    //do call
    $.ajax(options);
}


您可以将其设置为更多OOP,并且可以在不使用该间隔时暂停该间隔,但是我认为这可以理解基本概念。

07-24 18:54
查看更多