【发布时间】:2012-02-14 11:51:46
【问题描述】:
我正在开发一个 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 文档更容易理解的方式解释延迟对象的事情,那就太棒了!
谢谢!
【问题讨论】:
-
在这种情况下尝试检查
deferred.then返回的参数。console.log(arguments)请发布结果。 -
看这个页面上的例子:api.jquery.com/jQuery.when
-
您的
then方法应该接受两个参数:.then(function(a1, a2) {....a1将是第一个 ajax 调用的结果。a2将是 getscript 调用的结果。 -
@Ben Lee - 没必要。本质上,如果不包含第二个参数,则与使用
.done()相同。 -
@Kevin B:console.log(arguments) 的结果太长,无法在此处发布...但它是一个数组,如果我理解正确我所看到的,看起来我有一个数组它的长度与我的 $.ajax 计数相同。所以我应该能够从那里获取我的 xml 数据...