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

jQuery Deferred-获取链式Ajax调用的结果

龙晟睿
2023-03-14
问题内容

接下来的问题-我必须多次调用ajax函数,当所有函数完成时,将所有结果放入数组。我想出了这个:

function doAjax(xx){
var xdata = {json: $.toJSON({name: xx}),
            delay: 1};
return $.ajax({
    url:"/echo/json/",
    data:xdata,
    type:"POST"
});

}

var carr = [doAjax('a'),doAjax('b'),doAjax('c'),doAjax('d')]
var result = [];

$.when( carr )
    .done(function(data){
        console.log(data);
        $.each(data, function(ix,val){
            console.log(val.name);
        });
    });

在这里提琴:http :
//jsfiddle.net/Fkd9n/

一切似乎都工作正常,“ console.log(data)”用响应文本写出对象,但是“
console.log(val.name)”始终为“未定义”。那么一旦所有调用完成,如何将所有结果合并到一个数组中呢?

谢谢!


问题答案:

如果您知道有多少个Ajax调用,只需使用$ .when()

$.when(doAjax('a'),doAjax('b'),doAjax('c'),doAjax('d'))
.then(function(result_a,result_b,result_c,result_d) {
    console.log("Result from query a: " + result_a);
    console.log("Result from query b: " + result_b);
    console.log("Result from query c: " + result_c);
    console.log("Result from query d: " + result_d);
});

如果您不知道将有多少个ajax调用,则可以自己管理延迟的对象。

// altered version of doAjax()
function doAjax(number,dObject) {
    var xdata = {json: $.toJSON({name: number}), delay: 1};
    $.ajax({
        url:"/echo/json/",
        data:xdata,
        type:"POST",
        success: function(data) {
            results.push(data);
            dObject.resolve();
        }
    });
}

// array that will contain all deferred objects
var deferreds = [];

// array that will contain all results
var results = [];

// make the ajax calls
for (var i = 0; i < someNumber; i++) {
    var dObject = new $.Deferred();
    deferreds.push(dObject);
    doAjax(i,dObject);
}

// check if all ajax calls have finished
$.when.apply($, deferreds).done(function() {
    console.log(results);
});

魔术带有函数apply(),该函数为函数的参数组成一个数组。



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

  • 问题内容: 我有一个标准的javascript ajax调用,其中将data:设置为json数据。 我试图在php中获取数据,这是行不通的。 但是,可行。 我想知道这可能是我的框架或诸如此类的无法正常工作的东西吗?还是还有其他我可以用来获取数据的东西? 编辑: 因此,框架YII和扩展Restfullyii具有使用一种方法获取其数据的方法return json_decode(file_get_con

  • 问题内容: 我可能正在做一些愚蠢的事情。但是,如果我有一个像这样的普通链接: 然后将jQuery click事件附加到链接,如下所示: 一切正常。该页面并 没有 重定向到/不/拦截,这就是我认为是正确的。 现在… 我将$ .get之类的ajax调用引入了click事件,现在我的页面将被错误地重定向到该页面,这实际上覆盖了ajax调用。 有没有一种方法可以使jQuery或javascript仍然拦截

  • 问题内容: 我遇到了$ .get函数的问题。网址包含JSON 我的代码: 我知道这将警告空结果,因为是 异步的 。 那么,有什么方法可以使用外部的此get函数? 问题答案: 真正的答案是 NO ,但是您可以使用以下命令:

  • 问题 你想调用一个对象上的多个方法,但不想每次都引用该对象。 解决方案 在每次链式调用后返回 this(即@)对象 class CoffeeCup constructor: -> @properties= strength: 'medium' cream: false sugar: false

  • 问题内容: 我想在一个链中进行多个Ajax调用。但我也想在每次通话后按摩数据,然后再进行下一次通话。最后,当 所有 调用成功时,我想运行其他代码。 我正在为我的Ajax调用使用Angular $ http服务,并坚持这一点。 可能吗? 问题答案: 是的,由于AngularJS的服务是围绕PromiseAPI构建的,因此可以非常优雅地对其进行处理。基本上,对方法的调用会返回一个Promise,您可以