我有一个用于请求报告的网页。当用户单击按钮时,我正在调用一个函数,该函数将发出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;
}
答案 0 :(得分:0)
没有被调用的原因可能是因为你使用了this
var,这意味着别的东西。如果您将this.reportstatus();
更改为GLFiles_JSObject.reportstatus()
,则可能会解决您的问题。
另一方面,我认为你在这里误解了一些东西。为什么需要为此调用计时器方法来检查状态。在ajax请求完成的方法时调用OnSuccess。所以你不需要调用setTimeout。