当前位置: 首页 > 知识库问答 >
问题:

带有嵌套ajax调用的jQuery延迟对象

翟鹏
2023-03-14

我有一种情况,我的ajax调用必须以特定的顺序执行。我在其他情况下使用了jQueryDeferred对象,但似乎找不到一种方法来使其正常运行。

我有一个函数,在它的生命周期中执行许多ajax请求。一些请求将在其他请求的成功回调期间执行。

我的问题:当调用时,是否有方法将所有嵌套的延迟对象返回到原始的$?

一个简单的例子是:

function nestedAjax() {
    $.get("/", function(){
        console.log("First ajax done.");
        $.get("/", function(){
            console.log("Second ajax done.");
        });
    });
};

我正在尝试使用nestedAjax函数来使用$。when()$。done()如下所示:

$.when(nestedAjax()).done(function(){
    console.log("Complete");
});​

控制台输出读数为:

> First ajax done.
> Second ajax done.
> Complete.

我可以返回第一个get,以实现此目的:

> First ajax done.
> Complete.
> Second ajax done.

但显然这不是我所需要的。任何帮助都将不胜感激。


共有3个答案

琴刚豪
2023-03-14

由于某种原因,无法对上述答案添加评论。

所以我在这里加上我的评论。只有当ajax调用很快并且在返回dfd.promise()之前返回时,上述答案才有效。

我也有同样的问题。正如你所看到的。返回的延迟对象声明它是“挂起的”:http://jsfiddle.net/BtEKa/

阎晗日
2023-03-14

实际上,您不需要额外的延迟对象。通过使用then()链接,您可以做您想做的事情:

function nestedAjax() {
    return $.get("/echo/json/").then(function(result1){
        console.log("First ajax done.");
        if (result1) {
            return result1;
        } else {
            return $.get("/echo/json/").then(function(nestedResult){
                console.log("Second ajax done.");
                return nestedResult;
            });
        }
    });
};

我添加了一些逻辑,因为我认为这可能是您同步执行此操作的原因。之后,您可以在$中使用结果。如果如此:

$.when(nestedAjax(), $.get("/something/else")).then(function(nested, other) {
    console.log("Complete.", nested, other);
});
韩安顺
2023-03-14

其实很简单。虽然所有AJAX调用都是延迟对象,但我仍然为方法本身使用一个。

function nestedAjax() {
    var dfd = $.Deferred();
    $.get("/echo/json/", function(){
        console.log("First ajax done.");
        $.get("/echo/json/", function(){
             console.log("Second ajax done.");
            dfd.resolve();
        });
    });

    return dfd.promise();
};
 类似资料:
  • 问题内容: 我需要根据上一个调用中的数据连续进行6个ajax调用。我将每个呼叫嵌套在上一个呼叫的成功中。我的问题是格式化代码的最佳方法是什么,以使编辑器中的代码行数不超过一百万行? 忽略方括号,语法对于这个问题并不重要。 问题答案: 你可以做这样的事情

  • 问题内容: 我试图在加载器图标和​​成功的html之间添加一个小的延迟(2秒)。 我尝试使用的是setTimeout并放入延迟号。这是行不通的,所以我希望您能告诉我正确的方法是什么。 我的ajax代码: 现在,它运行得非常快。希望有人能帮忙。 问题答案: 应该用在里面 。

  • 下面的问题-我必须多次调用ajax函数,当所有函数完成后,将所有结果放入数组。我想到了这个: 在这里小提琴:http://jsfiddle.net/Fkd9n/ 一切似乎都很正常,“console.log(data)”用响应文本写出对象,但“console.log(val.name)”总是“未定义”。那么,一旦所有调用完成,如何将所有结果合并到一个数组中呢? 谢谢你!

  • 问题内容: 在某些情况下, 加号根本不会发布,将发送空格。我已经试过了: 没有运气。有人知道如何解决此问题吗? 问题答案: 应该 或简单地

  • 问题内容: 这是我在elasticsearch中存储在索引上的数据类型。我必须找到包含主要成分牛肉(且重量小于1000)和成分-(辣椒粉且重量小于250),(橄榄油和重量小于300)以及所有其他成分类似的食谱。 索引的映射是 我的查询是 但这给了Null。有人可以帮我吗?我认为我没有正确使用嵌套查询 问题答案: 试试这个:

  • 问题内容: 我有一个jQuery Ajax请求,我想用文本输入调用它,因此我将其嵌套在里面。这很好。 但这有时表现为越野车。当我非常快速地输入一些文本时,我得到的输入单词的结果中省略了原始输入单词的最后几个字母(可能是浏览器的某些错误)。我希望在没有输入活动持续一秒钟的情况下发送ajax请求,如果我很快输入文本并休息一秒钟(意味着我进行了输入)。我怎样才能做到这一点? 问题答案: 听起来好像是从先