我在ajax.php页面中放了一个sleep(5)。我需要返回的代码来启动另一个功能组。它也使用ajax。我的第一个ajax调用看起来像这样:
$.ajax({
url: '/ajax.php',
data: {
id : code
} ,
type: 'POST',
async:false, //<<< here
cache: false,
beforeSend: function(){
$('#loading').dialog();
},
success: function(data){
console.log(data.result);
$('#loading').dialog('close');
initAnotherFunctionGrop(data.result);
},
error: function(){
$('#loading').dialog('close');
}
});
为什么我无法在IE和Chrome中显示加载消息?只是Firefox正在使用它。
答案 0 :(得分:0)
异步代码是最好的。同步代码可能会挂起您的浏览器,这在ajax的情况下是一个坏主意,其中ajax请求的速度取决于用户计算机和浏览器之外的因素。您不希望用户计算机挂起,因此请避免使用它。而是尝试这样的事情。
function a(passedData){
return $.ajax({
url : '/ajax.php',
data : passedData
});
}
function b(passedData){
return $.ajax({
url : '/ajaxB.php',
data : passedData
});
}
$.when(a(data),b(data)).then(function(successDataForA,successDataForB){
//Do code after all asynchronous ajax calls are done.
//As a whole this is still asynchronous so other things can still run
},function(failA,failB){
//This fail callback is not necessary but here it is if needed
});
答案 1 :(得分:0)
使用此
$(document).ready(function () {
$('#ajaxloading').hide() // hide it initially
.ajaxStart(function () {
$(this).show();
})
.ajaxStop(function () {
$(this).hide();
});
});
这里“ajaxloading”是您要显示或隐藏的DIV的ID。你可以把任何内容放在这个div中
答案 2 :(得分:0)
如果您的加载图像是gif图像,那么很难在IE和Chrome中显示它,因为这些浏览器在同步调用时停止对DOM组件的任何更改,并且一旦执行代码,它就会显示所有更改。 您可以在加载图像后立即放置警告框来测试它。
$('#loading').dialog();
alert('loading image');
一旦提示它弹出,您现在可以看到在IE和Chrome中加载图像作为警报停止线程执行,直到用户给出响应。
阅读此链接: [https://stackoverflow.com/questions/11946828/loading-gif-image-is-not-showing-in-ie-and-chrome]
答案 3 :(得分:0)
过去我遇到过问题,即使使用异步调用,IE也会在Ajax调用期间显示“loading ...”消息(这是我当然建议你使用的) ),其中相同的代码 在FF中工作。
对IE有用的解决方法(在FF中没有造成任何伤害)是做这样的事情:
$('#loading').dialog();
setTimeout(function() {
$.ajax(...);
},1);
也就是说,显示“加载”消息然后使用setTimeout()
推迟Ajax调用 - 这会让浏览器在当前JS完成之后但在超时启动之前重新绘制页面。
但是当然如果您正在执行同步请求,您可能会想要在$.ajax()
方法之后使用其结果运行其他代码,因此您需要移动所有这些都传递给你传递给setTimeout()
的函数(或者从那里调用它,无论如何)。