从ajax成功递归调用另一个ajax函数

时间:2011-05-23 20:09:57

标签: javascript ajax

我有一个用于请求报告的网页。当用户单击按钮时,我正在调用一个函数,该函数将发出ajax请求来处理报告。一旦发出请求,我使用setInterval函数每1秒检查一次报告的状态(是否完成)。有些怎么样,setInterval()里面的函数根本就没有被调用。

以下是我的javascript代码

var GLFiles_JSObject = {
        url: "<%= Request.ApplicationPath %>/AjaxRequest.aspx",
        apppath: '<%= Request.ApplicationPath %>',
        btnRefreshId: '<%= btnRefresh.ClientID %>',
        ajaxFunctionName: 'GLBuilder_ReprocessFiles', 
        reportstatusFuncName: 'GLBuilder_GetReportStatus', 
        reportid: 0,
        ajaxError: function(XMLHttpRequest, textStatus, errorThrown){ 
            alert(XMLHttpRequest.statusText);        
        },
        ajaxSuccess: function(msg) {                
            if (msg === '') {
                setInterval(function(){
                    this.reportstatus();                    
                }, 1000);                        
            }                
        },
        reportstatusSuccess : function(msg) {                
            if (msg === '1') {
                clearInterval();
            }
        },
        reportstatus : function() {
            var keys = new Array('reportid');
            var values = new Array(reportid);
            //ajax call
            WebServicePost(true, this.url, this.reportstatusFuncName, keys, values, this.ajaxError, this.reportstatusSuccess);                                                                                  
        }            
    };            

    //this will be called when button is clicked.
    function reprocessGLFiles(reportid, btnid) {            
        //disable the button
        //$('#' + btnid).attr("disabled", true);
        GLFiles_JSObject.reportid = reportid;

        var keys = new Array('reportid');
        var values = new Array(GLFiles_JSObject.reportid);
       // make an ajax request to process the files
        WebServicePost(true, GLFiles_JSObject.url, GLFiles_JSObject.ajaxFunctionName, keys, values, GLFiles_JSObject.ajaxError, GLFiles_JSObject.ajaxSuccess);                                                     

        return false;
    }

1 个答案:

答案 0 :(得分:0)

没有被调用的原因可能是因为你使用了this var,这意味着别的东西。如果您将this.reportstatus();更改为GLFiles_JSObject.reportstatus(),则可能会解决您的问题。

另一方面,我认为你在这里误解了一些东西。为什么需要为此调用计时器方法来检查状态。在ajax请求完成的方法时调用OnSuccess。所以你不需要调用setTimeout。