Javascript 需要ajax微调器显示方面的帮助吗
我正在发出一个ajax请求,实际上是这样的Javascript 需要ajax微调器显示方面的帮助吗,javascript,jquery,ajax,Javascript,Jquery,Ajax,我正在发出一个ajax请求,实际上是这样的 $loading = $("#loadingDiv") function loadBuildList() { $.ajax({ async:true, url:"ajax_test.php", beforeSend : function() { $loading.show(); }, success : function() { $loading.hide() } }); } 现在,我需要在ajax运行
$loading = $("#loadingDiv")
function loadBuildList() {
$.ajax({
async:true,
url:"ajax_test.php",
beforeSend : function() { $loading.show(); },
success : function() { $loading.hide() }
});
}
现在,我需要在ajax运行时显示一个微调器图像,而且在ajax的执行结束之前,我的代码不应该进一步执行。如果我使async:false
我将无法加载微调器。如果我使async:true
,我将无法等到ajax执行结束
下面是我如何调用函数loadBuildList
...
//$loading.show(); // this I will use when aync : false
loadBuildList()
//$loading.hide();
...
我如何处理这种情况?有人能帮我吗 您应该永远不要使用
async:false
,否则您将停止整个执行线程,直到它得到响应为止
异步执行后需要运行的所有内容,在本例中是$。ajax
需要写入回调中。这就是JQuery$.ajax的成功之处
$loading = $("#loadingDiv")
function loadBuildList() {
$.ajax({
async:true,
url:"ajax_test.php",
beforeSend : function() { $loading.show(); },
success : function() {
$loading.hide();
// Stuff after $.ajax goes here.
},
fail: function() {
// Or here.
}
});
}
根据您提供的代码片段,您还应该在处进行阅读。在发送
之前,似乎没有必要使用,因为您只需要在页面上进行一次调用。你可以按照下面的方法做
$loading = $("#loadingDiv");
function loadBuildList() {
$loading.show(); // Show spinner before AJAX call
$.ajax({
async:true,
url:"ajax_test.php",
// beforeSend : function() { },
success : function() { $loading.hide() }
});
}
您仍然可以尝试按照@zurfyx所述进行调整,但通常当您需要一些集中化的操作,而不是单个AJAX调用时,会遵循这种做法。处理微调器可以使用.complete
(因此会选择成功和错误):
然而,这一评论更有趣:
我的代码不应该进一步执行
并不是您不想进一步执行,而是您想在ajax调用完成后继续执行
您可以通过返回$.ajax对象来实现这一点,它是一个承诺
。有了这个承诺,您就可以在自己的代码中添加链式调用。这类似于使用回调参数,但通常更灵活:
function loadBuildList() {
return $.ajax({
...
}
// calling code
loadBuildList().done(function() {
// code to run when the list has loaded
});
See linked的可能重复-它解释了如何重新构造/重新思考您的设计。如果您需要使原始异步调用同步以使代码正常工作,那么您的编码是错误的。您可以将要执行的代码放在成功回调中,也可以使用承诺(推荐)。将微调器映像放在loadingDiv中,$loading.hide()放在always callback bcz中如果发生任何错误,微调器将继续显示,从成功回调返回响应。@shi“从成功回调返回响应”否。“返回响应”为时已晚. 请参阅链接可能的副本。感谢您的回答。我会试试看。@SurajSun如果你这样做,你也应该仔细阅读,尽量避免。谢谢你的回复。我试试这个。
function loadBuildList() {
return $.ajax({
...
}
// calling code
loadBuildList().done(function() {
// code to run when the list has loaded
});