当前位置: 首页 > 面试题库 >

等到所有jQuery Ajax请求都完成了吗?

朱啸
2023-03-14
问题内容

我如何让一个函数等到所有jQuery Ajax请求都在另一个函数中完成之后?

简而言之,在执行下一个请求之前,我需要等待所有Ajax请求完成。但是如何?


问题答案:

jQuery现在为此目的定义了一个when函数。

它接受任意数量的Deferred对象作为参数,并在它们全部解析后执行一个函数。

这意味着,如果您要发起(例如)四个ajax请求,然后在完成后执行操作,则可以执行以下操作:

$.when(ajax1(), ajax2(), ajax3(), ajax4()).done(function(a1, a2, a3, a4){
    // the code here will be executed when all four ajax requests resolve.
    // a1, a2, a3 and a4 are lists of length 3 containing the response text,
    // status, and jqXHR object for each of the four ajax calls respectively.
});

function ajax1() {
    // NOTE:  This function must return the value 
    //        from calling the $.ajax() method.
    return $.ajax({
        url: "someUrl",
        dataType: "json",
        data:  yourJsonData,            
        ...
    });
}

在我看来,它使语法清晰明了,并避免涉及任何全局变量(例如ajaxStart和ajaxStop),这些全局变量在页面开发时可能会产生有害的副作用。

如果您事先不知道需要等待多少个ajax参数(即,您想使用可变数量的参数),它仍然可以完成,但是有点棘手。请参阅将Deferreds数组传递给$.when()(以及在使用可变数量的参数进行故障排除时,可能还有jQuery。)。

如果您需要对ajax脚本等的失败模式进行更深入的控制,则可以保存由返回的对象.when()-这是一个jQuery
Promise对象,其中包含所有原始ajax查询。您可以调用.then().fail()在其上添加详细的成功/失败处理程序。



 类似资料:
  • 问题内容: 我需要等到我所有的ajax函数都完成后,再继续执行。 我的特殊情况是,在提交表单之前,我需要翻译表单中的某些字段。我通过ajax调用将其转换为外部站点。根据表单中的某些值,我需要进行更多或更少的翻译。完成所有翻译后(如果有),我必须使用ajax验证表单,如果表单有效,则提交。 这是我的方法: 首先,我有一个函数发送ajax调用并对接收到的数据进行处理: 然后,当要提交表单时,我将执行以

  • 我正在做一个forEach循环,它对Cloudinary进行API调用,我正在用响应数据构建一个数组。 一旦收集到数据,我需要将其发送到其他API。 在发送数据之前,我如何等待promise得到解决并收集数据? 这是我的代码:

  • 问题内容: 我有一个页面,根据变量的长度,它可以发出不同数量的请求,然后我只想在所有请求完成后才将数据发送到范围。对于这个项目,我不想使用jQuery,因此请不要在答案中包含jQuery。目前,随着每个请求的完成,数据被发送到作用域,这不是我想要的。 这是我到目前为止的部分代码。 这是我对此表示怀疑的部分,因为某些东西需要作为的参数,但是在Angular的文档中并未提及,我不确定它的含义。 谢谢你

  • 我有一个简单的Java程序,它使用SpringWebClient发送多个请求。每个都返回一个mono,我使用的是response。subscribe()以检查结果。 但是,我的主执行线程在处理所有请求之前完成,除非我添加一个长线程。睡眠()。 对于CompletableFutures,您可以使用:CompletableFuture。allOf(期货)。join(); 有没有办法等待所有单声道的完成

  • 问题内容: 但是我的问题是不对的: 我正在执行许多ajax请求,并将它们保存在数组中: 正如相关问题所表明的那样,$ .when方法 按顺序 接受 一些对象,但是在这里我要 列出它们的清单 。 我在http://api.jquery.com/jQuery.when/#jQuery-when- deferreds中 阅读了文档,但是该方法似乎不支持这种情况(将to 列表传递给函数) 怎么会这样?请帮

  • 我有一个4个线程同时运行的代码。我想等到所有这4个线程都完成。并且只有在那之后才能继续应用程序流程。 我尝试了两种方法: ,此方法按预期工作。 之后出现的代码仅在所有线程完成后执行。 ,这种技术允许执行代码,即使不是所有线程都已完成,也会在 之后执行。 代码示例: 我的问题: 为什么 和 不要等到所有线程都完成并打印 “我们完成了!所有线程都已完成!» 在调用 ?