我有一个JavaScript函数,该函数进行AJAX调用以返回一些数据,该调用在选择列表更改事件上触发。
我已经尝试了多种方法来显示等待中的装载机,因为它当前会暂停选择列表,并且从客户的角度来看并不理想。
问题是,无论我尝试用哪种方式显示它,AJAX调用都在加载程序显示之前完成。
当前代码:
<select name="addresslist" class="form-select" id="edit-addresslist" onchange="selectAddress(this)">
<option value="none">-- Please select an address from the list below --</option>
//there are more options but this isn't important here
</select>
JS文件
function selectAddress(data) {
var loader = document.getElementbyId('overlay-loader');
var selectedAddress = data.value;
var uprn = selectedAddress.split(',')[1];
loader.style.display = "block";
$.ajax({
url: '~/collectiondates',
async: false,
data: {
uprn: uprn
},
success: function (data) {
result = data;
}
这是我尝试的方法之一,我也尝试过在“ onchange”事件上调用一个单独的函数,在selectAddress中调用一个单独的函数,另一个函数显示加载程序然后调用“ selectAddress”,但没有任何效果, AJAX函数始终首先完成,然后显示加载程序(不再需要时)。
其余代码完全按预期运行。
谢谢。
答案 0 :(得分:1)
您好,如果请求是快速检查我在此jsfiddle中所做的示例,则应使用延迟的Promise,包括done,fail以及始终与ajax调用一起使用,甚至还要与settimeout一起使用,这也是语法示例:< / p>
$( 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();
}
});
});
} );
希望对您有帮助=)
答案 1 :(得分:0)
如果后端工作太快,您可以尝试将AJAX代码放在setTimeout函数中。
setTimeout(function(){
// put here your AJAX
}, 2000); // 2 seconds delay
答案 2 :(得分:0)
稍后可能会显示,因为您没有将css设置为在返回成功/错误后隐藏。如果您担心加载器未在ajax完成之前显示,则可以使用setTimeout函数在AJAX调用中设置延迟 这是我的工作。 HTML-
<select name="addresslist" class="form-select" id="edit-addresslist" onchange="selectAddress(this)">
<option value="none">-- Please select an address from the list below --</option>
//there are more options but this isn't important here
</select>
JS / JQ-
function selectAddress(data) {
openloader();
var selectedAddress = data.value;
var uprn = selectedAddress.split(',')[1];
$.ajax({
url: '~/collectiondates',
async: false,
data: {
uprn: uprn
},
success: function (data) {
closeloader();
result = data;
}
}
}
function openloader(){
$("#overlay-loader").show();
}
function closeloader(){
$("#overlay-loader").hide();
}