Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 需要ajax微调器显示方面的帮助吗_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript 需要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运行

我正在发出一个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
});