jquery - 有人可以清楚地解释 jQuery.when() 和 deferred.then() 是如何工作的吗?

标签 jquery jquery-deferred

我正在开发一个 Web 应用程序,我需要加载一些文件 $.ajax。我在 $.when().then() 中发现了一些有趣的东西。

当我与请求返回的数据没有任何特殊关系时,它非常有用,如下例所示:

$.when(
    $.getScript('js/script1.js'),
    $.getScript('js/script2.js')
).then(function(){
    // Do whatever I want once both scripts are loaded...
});

当我有一个像这样的ajax请求时,如果效果很好:

$.when(
    $.ajax('xml/myxml.xml')
).then(function(data){
    // Here I can work with data like I would with a regular ajax request
    alert($(data).find('mynode').text());
})

但是如果我尝试以下操作,我无法让它工作:

$.when(
    $.ajax('xml/myxml.xml'),
    $.getScript('js/script.js')
).then(function(data){
    // But here, I can't access $(data).find('mynode')...
})

我读了deferred object页面,但大部分内容对我来说太技术性了,当我使用 $.when().then() 从多个加载脚本和数据时,我无法理解如何获取 ajax 数据来源。

因此,如果有人可以帮助我了解如何在上面的测试用例中使用我的ajax数据,那就太好了!如果与此同时有人能够以比官方 jQuery 文档更容易理解的方式解释延迟对象的事情,那就太棒了!

谢谢!

最佳答案

显然,对于每个延迟对象,至少如果它是 Ajax 请求,$.when 会将 [ "success", statusText, jqXHR ] 之类的参数传递给回调。 jqXHR 是一个表示 XMLHttpRequest 的对象(更多信息请参见 $.ajax documentation )。所以以下应该有效:

$.when(
    $.ajax('xml/myxml.xml'),
    $.getScript('js/script.js')
).then(function(a){
    $(a[2].responseText).find('mynode');
});

请参阅 $.when 中的第一个示例文档。

关于一般的延迟对象,也许this question有帮助。

关于jquery - 有人可以清楚地解释 jQuery.when() 和 deferred.then() 是如何工作的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8932529/

相关文章:

javascript - 将剪贴板中的图像粘贴到fabric.js Canvas 上?

javascript - 在一些 jquery ajax 之后如何做其他 jquery 事情

javascript - jQuery Deferred - 捕获与失败

javascript - 有可选的延期吗?

javascript - 使用 jQuery 延迟 - when() 和 getJSON() 回调

jquery - 将函数的执行推迟到其他事件发生之后

javascript - 我需要使用 Prototype 来做一些我可以在 jQuery 中轻松完成的事情

javascript - 如何检查两个元素上的鼠标悬停?

jquery - 如何在@media print 中打印页码?

javascript - 如何遍历有效的 JSON