我正在开发一个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()时我应该如何获取我的ajax数据.then()从多个源加载脚本和数据。
因此,如果有人可以帮我找到如何在我上面的测试用例中使用我的ajax数据,那就太棒了!如果在此期间有人能够以比官方jQuery文档更容易理解的方式解释延迟对象的事情,那就太棒了!
谢谢!
答案 0 :(得分:3)
显然,对于每个延迟对象,至少如果它是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有帮助。