Ajax递归函数工作奇怪

时间:2013-05-13 15:52:24

标签: javascript jquery ajax recursion

大家好,这是我的代码:

var ajax={
    chiamata:function(target,url,opzioni){
        if (!tools.array_key_exists('caricamento',opzioni)){
            opzioni['caricamento']=1;
        }
        var dati=url.split('?');
        $.ajax({
            type: opzioni['type'],
            url: url,
            contentType:"application/x-www-form-urlencoded; charset=UTF-8",
            data: dati[1],
            dataType: "html",
            success: function(msg){
                if (opzioni['caricamento']!=0){
                    ajax.printLoading();
                }
                $(target).html(msg);
            },
            error: function(){
                alert("Chiamata fallita!");
            }
        })  
    },
    printLoading:function(){
        var body="#colonnaDX";
        $(body).ajaxStart(function(){
            $(body).append('<div id="loading"><img src="graphic/IMAGE/spinner.gif"/>Loading...</div>');
        })
        .ajaxStop(function(){
            $('#loading').remove(); 
        });
    }
},        
//Recursive function
var object={
    checkAzione:function(target,url,opzioni,interval){
        if (!interval)
            interval=60000;
        ajax.chiamata(target,url,opzioni);
        setTimeout(function() {
            this.checkAzione(target,url,opzioni,interval);
        }, interval);
    }
}
$(document).ready(function(){
    object.checkAzione(
        '#colonnaDX',
        'someactions.php',{
            'caricamento':0
        },
        10000
    );
})

我会尝试尽可能地解释问题,当文档准备就绪时,函数“checkAzione”启动,它会产生一些像DB调用等东西,这种类型的ajax调用不需要任何视觉加载像微调器等所以在数组“opzioni”我设置一个标志'caricamento':0(相同的'加载':0)只是检查我的ajax对象,看看我的意思,它的工作,直到我做一些ajax调用,使用'caricamento':1,从那一刻起,每个ajax调用我的递归函数使得“printLoading”......任何提示????

1 个答案:

答案 0 :(得分:0)

ajaxStartajaxStop 全球,您可以将它们添加到正文中。在这种情况下,您可能不应该使用ajaxStart/Stop,只需将功能添加到ajax侦听器(成功和错误)。