2

我知道异步事物会改变上下文,我们需要使用闭包来使其工作,但我无法处理下一个示例:

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();
};

loadTempate用不同的ID和几次打电话。但是第一个成功的ajax结果将具有加载template,但不等于options.id传递给它。

有什么想法吗?

更新

我有装载机

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});
4

0 回答 0