当使用可变数量的参数进行故障排除时

前端之家收集整理的这篇文章主要介绍了当使用可变数量的参数进行故障排除时前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个问题,使用jQuery.when()等待多个ajax请求完成之前调用另一个函数

每个ajax请求将获得JSON数据,看起来像这样:

function loadData(arg){
        var ajaxCall = $.ajax(
            URL // depends on arg
        )
       .error( .... );
       return ajaxCall;
   }

当请求被调用时,返回值(ajaxCall)被添加到名为ajaxRequests的列表。

ajaxRequests = [];
    ajaxREquests.push(loadData(arg))

当所有的请求已经作出,我试图传递ajaxRequests到$ .when为了等待所有的请求完成。

var defer = $.when.apply($,ajaxRequests);
        defer.done(function(args){
            for (var i=0; i<args.length; i++){
                inst.loadData($.parseJSON(args[i].responseText));
            }
            inst.draw();
        });

inst是一个基于JSON数据加载和绘制图形的对象。

问题是,它似乎并没有真正等待请求完成 – args [i]是一个对象,但responseText是未定义的,当代码运行。如果我保存args [i]并稍后从控制台访问它,它的工作原理。

我怀疑这个问题是关于使用.when与任意数量的参数,因为所有的例子,我看到在网络上给它一个预定义的参数列表。

我不知道如果使用应用是正确的想法或没有,但任何一种方式,它不能正常工作和行为不规律(浏览器依赖)。

任何帮助将不胜感激。

如果需要更多信息,请与我们联系。
我使用jQuery 1.5

解决方法

虽然亚历克斯确实提供了一个解决他的问题,我发现以下它有点困难。我有一个类似于他解决的问题,我想为任何需要处理可变数量的ajax请求的人分享我的解决方案。
// Array of requests
var requests = Array();
requests.push($.get('responsePage.PHP?data=foo'));
requests.push($.get('responsePage.PHP?data=bar'));

var defer = $.when.apply($,requests);
defer.done(function(){

    // This is executed only after every ajax request has been completed

    $.each(arguments,function(index,responseData){
        // "responseData" will contain an array of response information for each specific request
    });

});
原文链接:https://www.f2er.com/jquery/184329.html

猜你在找的jQuery相关文章