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

jQuery.when了解

贺景山
2023-03-14
问题内容

我正在尝试使用jQuery.when触发两个ajax请求,然后在两个请求完成后调用一些函数。这是我的代码:

var count = 0;
var dfr;

var showData = function(data) {
    dfr.resolve();
    alert(count);
   // Do something with my data data received
};

var method1 = function() {
    dfr = $.Deferred();

    return $.ajax('localhost/MyDataService/DataMethod_ReturnsData', {
        dataType: "jsonp",
        jsonp: "$callback",
        success: showData
    });
};

var method2 = function() {
    return $.ajax('localhost/MyDataService/DataMethod_ReturnsCount', {
        dataType: "jsonp",
        jsonp: "$callback",
        success: function(data) {
            count = data.d.__count;
        }
    });
};

$.when(method1(), method2())
    .then(showData());

但是,这没有按预期方式工作。Ajax调用method1将返回要在其中使用的数据,showData()而Ajax调用method2将返回要分配给var
count并随后在中使用的count showData()

但是,当我启动上面的代码时,先method1被调用,然后method2再将showData数据保留showData为as
'undefined'。我如何才能做到这$.when一点,据我所知,只有当两个返回$.promise的函数都执行时,才能进行。我希望两个ajax调用都应该并行调用,然后根据两个调用的结果显示以后的结果。


问题答案:
function showData(data1, data2) {
    alert(data1[0].max_id);
    alert(data2[0].max_id);
}

function method1() {
    return $.ajax("http://search.twitter.com/search.json", {
        data: {
            q: 'ashishnjain'
        },
        dataType: 'jsonp'
    });
}

function method2() {
    return $.ajax("http://search.twitter.com/search.json", {
        data: {
            q: 'ashishnjain'
        },
        dataType: 'jsonp'
    });
}

$.when(method1(), method2()).then(showData);​

这是一个工作的jsFiddle



 类似资料:
  • 我发现,当我的多个请求都成功时,它们可以正常工作,但是如果其中一个请求因任何原因失败,我的回调就不会执行。我查了jQuery留档,上面写着 在将多个延迟对象传递给jQuery.when()的情况下,该方法从一个新的“主”延迟对象返回promise,该对象跟踪已传递的所有延迟的聚合状态。当所有延迟被解决时,该方法将立即解决其主延迟,或者当其中一个延迟被拒绝时,该方法将立即拒绝该主延迟 这意味着如果我

  • 携程数据仓库一面 没想到他会问数据库三范式,脑子直接一篇空白,好久没有背过这些了(关键也没人问呀),麻了麻了 说说你对数据仓库的看法和想法 简单问了下实习,很表面 数据库三范式 直接一点也不记得了 被面试官教育,尽管不是数仓,但这些基础的数据库知识还要会的 数据倾斜 几种情况 mapreduce流程 shuffle 过程 有没有了解过olap数据库,回答clickhouse 简单讲了一下click

  • 问题内容: 我不太清楚该在哪里抛出该异常。 例如,我正在实现接口,并且不希望任何人调用该方法: Future#get(long,TimeUnit)。 所以,我可以扔吗? 事情是方法的规范并没有说明抛出异常。反过来,例外 抛出以指示不支持请求的操作。 类UnsupportedOperationException 我的意思是,如果您不希望调用它,通常会抛出它,否则可能会因为不是所有方法都已实现而被认为

  • 问题内容: 我试图了解Go中的并发性。特别是,我编写了以下线程不安全程序: 我认识到我应该使用渠道来防止与发生竞争,但这不是重点。程序打印,然后似乎永远循环(不再打印任何内容)。我希望它能打印出无限的数字列表,可能由于竞态条件而跳过某些数字并重复其他数字(或更糟的是,在更新数字时打印数字)。 我的问题是:为什么程序只打印一行? 只是要清楚一点:对于这个玩具示例,我不是故意使用渠道。 问题答案: 关

  • 问题内容: 我了解这是一个框架;甚至还有一个开源的跨平台游戏开发库。我转到libgdx主页,并按照视频教程中的说明进行操作。正确设置项目后,我可以在多个受支持的平台上运行默认的my- gdx-game项目。太好了,花花公子…现在呢? 我一直在搜索论坛,Wiki,javadocs和许多其他站点,以寻找体面的简单操作方法。不幸的是,我找不到任何东西,那里的大多数帮助都假设您对这个库有一些基本的了解。

  • 问题内容: JNDI就像是类固醇的地图,对吗?我使用键来查找对对象的引用。另外,什么是InitialContext?我似乎不知道这个主意。 问题答案: 从概念上讲,JNDI就像类固醇。 允许您从命令行将参数传递给代码。同样,JNDI允许您在代码外部(例如,在应用程序服务器配置文件中)配置任意对象,然后在代码中使用它们。 换句话说,它是Service Locator模式 的实现:您的代码从中心注册表