Ajax 如果jquery post开始花费太长时间,如何打开进度条
在jqueryajax帖子开始花费太长时间之后,是否可以只显示某种进展,而不显示它(如果是即时的)?我有下面的代码,它使用setTimeout延迟显示我的进度指示器(这基本上是我启用的twitter引导模式,其中有一个进度指示器gif),但当我调试并在服务器端代码上放置brek点时,它似乎不起作用,然后,在我的客户端setTimeout中,它应该会关闭,但是在我的服务器返回响应之前,永远不会调用setTimeout(因此,如果花费的时间太长,我永远不会获得进度条)。当我不使用setTimeout来延迟它时(基本上根本不延迟),或者如果我做了如此短的延迟,以至于进度指示器几乎立即显示,但没有1.5秒的延迟,那么它工作得很好 以下是我的javascript:Ajax 如果jquery post开始花费太长时间,如何打开进度条,ajax,jquery,Ajax,Jquery,在jqueryajax帖子开始花费太长时间之后,是否可以只显示某种进展,而不显示它(如果是即时的)?我有下面的代码,它使用setTimeout延迟显示我的进度指示器(这基本上是我启用的twitter引导模式,其中有一个进度指示器gif),但当我调试并在服务器端代码上放置brek点时,它似乎不起作用,然后,在我的客户端setTimeout中,它应该会关闭,但是在我的服务器返回响应之前,永远不会调用setTimeout(因此,如果花费的时间太长,我永远不会获得进度条)。当我不使用setTimeout
var progressModalRunning = false;
var needModalProgress = true;
// document.ready events/functions to call
$(function () {
$("form").on("submit", function (event) {
event.preventDefault();
var form = $(this);
// We check if jQuery.validator exists on the form
if (!form.valid || form.valid()) {
toggleModalProgressAndButtons(form, true);
$.post(form.attr('action'), form.serializeArray())
.done(function (json) {
json = json || {};
// In case of success, we redirect to the provided URL or the same page.
if (json.success) {
location = json.redirect || location.href;
} else if (json.errors) {
displayErrors(form, json.errors);
toggleModalProgressAndButtons(form, false);
}
})
.error(function () {
displayErrors(form, ['An unknown error happened.']);
toggleModalProgressAndButtons(form, false);
});
}
});
});
// show/hide modal progress indicator and disable/enable modal buttons
var toggleModalProgressAndButtons = function (form, toggle) {
if (toggle) {
showProgress();
} else {
hideProgress();
}
}
// display validation errors
var displayErrors = function (form, errors) {
needModalProgress = false;
var errorSummary = getValidationSummaryErrors(form)
.removeClass('validation-summary-valid')
.addClass('validation-summary-errors');
var items = $.map(errors, function (error) {
return '<li>' + error + '</li>';
}).join('');
var ul = errorSummary
.find('ul')
.empty()
.append(items);
};
// Show a progress indicator in it's own modal
var showProgress = function () {
// we will delay it by 1.5 seconds - don't want to bother showing if the response is that fast,
// because it makes the screen to appear to flicker since backdrop for modal is darker
setTimeout(function () {
if (needModalProgress) {
progressModalRunning = true;
$('#progress').modal({ keyboard: false, backdrop: 'static' });
}
}, 1500);
}
// hide the progress indicator
var hideProgress = function () {
if (progressModalRunning) {
progressModalRunning = false;
needModalProgress = true;
$('#progress').modal('hide');
}
}
var progressModalRunning=false;
var needModalProgress=真;
//document.ready要调用的事件/函数
$(函数(){
$(“表格”)。在“提交”上,功能(事件){
event.preventDefault();
变量形式=$(此);
//我们检查表单上是否存在jQuery.validator
如果(!form.valid | | form.valid()){
切换ModalProgressAndButtons(形式,真);
$.post(form.attr('action'),form.serializeArray())
.done(函数(json){
json=json |{};
//如果成功,我们将重定向到提供的URL或同一页面。
if(json.success){
location=json.redirect | | location.href;
}elseif(json.errors){
显示错误(表单,json.errors);
切换ModalProgressAndButtons(表单,false);
}
})
.错误(函数(){
displayErrors(表单,[“发生了未知错误]);
切换ModalProgressAndButtons(表单,false);
});
}
});
});
//显示/隐藏模式进度指示器和禁用/启用模式按钮
var toggleModalProgressAndButtons=函数(形式,切换){
如果(切换){
showProgress();
}否则{
hideProgress();
}
}
//显示验证错误
var displayErrors=函数(形式,错误){
needModalProgress=假;
var errorSummary=getValidationSummaryErrors(表单)
.removeClass('validation-summary-valid'))
.addClass('validation-summary-errors');
变量项=$.map(错误,函数(错误){
返回“”+错误+” ;
}).加入(“”);
var ul=错误摘要
.find('ul')
.empty()
.附加(项目);
};
//以自己的模式显示进度指示器
var showProgress=函数(){
//我们将延迟1.5秒-不想麻烦显示响应是否那么快,
//因为它使屏幕看起来闪烁,因为modal的背景较暗
setTimeout(函数(){
如果需要(需要模块程序){
progressModalRunning=true;
$('#progress').modal({keyboard:false,background:'static'});
}
}, 1500);
}
//隐藏进度指示器
var hideProgress=函数(){
如果(progressModalRunning){
progressModalRunning=false;
needModalProgress=真;
$('#progress').modal('hide');
}
}