在发送(1) show spinner gif
请求之前,我打算执行ajax
以下ajax操作,在请求完成后,(2) hide
gif和3 display
适当的警报消息。
最后(4) reload
页面。
代码如下:
$.ajax({
url: rUrl,
data: {
id: rID,
requisitionStatus: rStatus,
comment: rComment
},
type: "POST",
cache: false,
beforeSend: function() {
$("#requisitionStatusDialog").dialog('close');
$('#ajax_loader_my').show();
},
success: function(data, resp) {
var json = data;
var obj = JSON && JSON.parse(json) || $.parseJSON(json);
if (obj.status == "success") {
alert('Success! ' + obj.message);
location.reload();
} else if (obj.status == "error") {
alert('Error!' + obj.message);
}
},
error: function(data, resp) {
$("#updateDialog").dialog('close');
console.log(resp);
},
complete: function() {
$('#ajax_loader_my').hide();
}
});
但是在这种情况下,alert
首先弹出,而spinner gif
仍然显示,然后单击reloads
后OK
。
我什至尝试使用hiding
回调本身中的success
gif,而不是使用complete
:
success: function(data, resp) {
var json = data;
var obj = JSON && JSON.parse(json) || $.parseJSON(json);
if (obj.status == "success") {
$('#ajax_loader_my').hide();
alert('Success! ' + obj.message);
location.reload();
} else if (obj.status == "error") {
alert('Error!' + obj.message);
}
},
两者给出的结果相同。
答案 0 :(得分:2)
隐藏微调框之前弹出警报的原因是成功代码在完成之前运行,从而隐藏了微调框。重新加载的原因是,在警报发出后,您发送了location.reload();
检查$('#ajax_loader_my')。hide();实际上隐藏了微调器。 html中包含或包含微调器的元素必须将其id设置为ajax_loader_my。
如果您打开Chrome或Firefox开发工具,则应该能够发送$('#ajax_loader_my')。hide()并查看会发生什么情况。
答案 1 :(得分:1)
以这种方式重写代码,这会将与警报和位置相关的代码放在事件队列中,事件队列将在空闲时运行。
if(obj.status=="success") {
$('#ajax_loader_my').hide();
setTimeout(function(){
alert('Success! '+obj.message);
location.reload();
},0);
}
答案 2 :(得分:1)
您好,您应该尝试使用Promise,这里是文档Jquery promises,我是即时制作的,可能会有一些错误,但这只是一个示例:
$( function() {
function AjaxCall(rID,rStatus,rComment){
return $.ajax({
url: 'request.php',
data: {
id: rID,
requisitionStatus: rStatus,
comment: rComment
},
type: "POST",
cache: false,
beforeSend: function() {
$("#requisitionStatusDialog").dialog('close');
$('#ajax_loader_my').show();
}
})
}
$( "#requisitionStatusDialog" ).dialog();
$("#yourbuttonInputId").on('click',function(event) {
AjaxCall().done(function(data,response){
var obj = JSON.parse(data);
if (obj.status == "success") {
alert('whe are on done!');
}
}).fail(function(data,response){
$("#updateDialog").dialog(' close');
}).always(function(data){
if(confirm('You have finished the request. Click OK if you wish to continue ,click Cancel to reload the page.'))
{
$('#ajax_loader_my').hide();
$("#requisitionStatusDialog").dialog('open');
}else{
location.reload();
}
});
});
} );
编辑:选中此jsfiddle,它将指导您详细说明代码
希望有帮助
答案 3 :(得分:-1)
我宁愿建议使用带有ID的空div或span。 比在该div的html中显示成功。 例如:
$('#ajax_loader_my').hide();
setTimeout(function () {
$('#successDiv').html('Success! ' + obj.message);
location.reload();
}, 2000);