我知道异步会改变上下文,我们需要使用闭包才能使它工作,但我无法处理下一个例子:
var loadTemplate = function(options){
var def = $.Deferred();
$.ajax({
url: '/',
data: { id: options.id },
type: 'GET'
}).done(function(template){
// HERE template's id !== options.id
$('body').append(template);
def.resolve();
});
return def.promise();
};
我使用不同的ID和多次呼叫loadTempate
。但是第一次成功的ajax结果将会加载template
,但不等于options.id
传递给它。
有什么想法吗?
更新
我有 loader :
var loader = function(){
var _load = function(options){
$.when(loadTemplate(options), loadAnotherStuff(options))
.done(function(res){
// a lot of work here
});
};
return {
load: _load
}
};
然后我从页面上调用它:
Loader.load({ id: 1});
Loader.load({ id: 2});
Loader.load({ id: 3});