我想在第一个ajax调用启动之前实现进度条,并希望在第一次调用结束后关闭然后再结束 我想再次启动第二个ajax调用的进度条,并希望在第二个ajax调用完成时关闭。
我试过但它没有显示出来。由于ajax调用,它正在调用并且同时它正在关闭,我在这里我不知道ajax调用的确切时间,我也不能使用setTimeOut来关闭。
这是代码。请帮助我实现这一目标。
var getResponseFromSOA = function(filterObject, file,verb, callback) {
createFilterString(filterObject, function(filterString) {// get the filter string
if(jQuery) {// check the jQuery file is integrated or not
var headers = {Authorization: COOKIES.readCookie("Authorization"),requestmode:"ACK_URL"};
headers.isRender = file.isRender;
if(file.inputDataHeaders)
headers.inputData = file.inputDataHeaders;
// Here i want to show be ajax call
$progressBar.kendoProgressBarShow();
jQuery.ajax({
url: file.fileUrl + "/" + $securityComponent.cryptograghicFunctions.encryptor(filterString),
type: verb,
headers: headers,
async: false,
/* beforeSend: function() {
$progressBar.kendoProgressBarShow();
},*/
error : function()
{
console.log("some error occured at getResponseFromSOA submitting the request");
},
success: function(responseDataFromRequestHandler) {
console.log(responseDataFromRequestHandler);
// again call because it is async mode form SOA team
jQuery.ajax({
url: responseDataFromRequestHandler.links[1].href,
async: false,
headers: {Authorization: COOKIES.readCookie("Authorization"),requestmode:"ACK_URL"},
success: function(responseDataFromResponseHandler) {
try {
console.log(responseDataFromResponseHandler);
if(callback) callback(responseDataFromResponseHandler.data);
}catch(e) {
console.log(responseDataFromResponseHandler);
// printing the error message in the console window
console.log("Error in the callback in data-transactor-js > getResponseFromSOA"
+ "\n"
+ e.message);
}
},
complete: function() {
// Here i want to close the progressBar or last below it's commented mode
$progressBar.kendoProgressBarHide();
}
});
},
complete: function() {
// Here i want to close the progressBar or last below it's commented mode
$progressBar.kendoProgressBarHide();
}
});
// If it's not possible there then i want to close here.
//$progressBar.kendoProgressBarHide();
} else throw {message: "jQuery is not defined or jQuery file is not linked"};
});
};
这是Porgress API代码。
$progressBar = {
kendoProgressBarShow : function() {
if (jQuery) {
kendo.ui.progress($("#progressBar"), true);
} else {
console.log("jQuery not found");
}
},
kendoProgressBarHide : function() {
if (jQuery) {
kendo.ui.progress($("#progressBar"), false);
} else {
console.log("jQuery not found");
}
}
};
答案 0 :(得分:2)
进行ajax调用并且async: false
UI冻结
因此请尝试设置async: true
或者您可以在以下链接中找到解决方案
https://codesave.wordpress.com/2013/09/25/ajax-call-freezes-ui-animation-locked-ui-during-ajax-call/
答案 1 :(得分:0)
您可以在程序中尝试这种类型的逻辑。
$('#clickfun').click(function() {
$(this).after('<div id="loading">Loading...</div>');
for(var i=0;i<5;i++){
setTimeout(function() {
$.ajax({
url: '/echo/html/',
type: 'post',
async: false,
data: {
html: '<p>Hello Friends</p>'+i,
},
success: function(data) {
console.log(data);
$('#clickfun').after(data + i);
},
error: function() {
alert('Error found');
},
complete: function() {
$('#loading').remove();
}
});
}, 0);
}
});