2013-04-07 42 views
0

我想我已经添加了一层复杂性。下面是我得到了什么:如何使用jQuery的承诺,使功能不嵌套

;(function($, window, undefined) { 
    function download() { 
     var local = {}; 
     local.data = {}; 
     local.data.method = 'getMyData'; 
     local.dataType = 'json'; 
     local.Promise = $.ajax('myComponent.cfc', local); 
     local.Promise.done(PromiseDone); 
     local.Promise.fail(PromiseFail); 
    } 

    function PromiseDone(result) {}; 
    function PromiseFail(myEvent) {}; 
})(jQuery, window); 

我希望做的是这样的:

;(function($, window, undefined) { 
    var Variables = {}; 
    Variables.Promise = $.Deferred(); 

    function download() { 
     var local = {}; 
     local.data = {}; 
     local.data.method = 'getMyData'; 
     local.dataType = 'json'; 
     Variables.Promise = $.ajax('myComponent.cfc', local); 
    } 

    Variables.Promise.done(function(result) { 
    }); 
    Variables.Promise.fail(function(myEvent) { 
    }); 
})(jQuery, window); 

我的目标就是击败的JavaScript以我的功能不被嵌套。

问:我的想法会起作用吗?或者deferred需要resolve才能被认为是done

回答

2

你真的添加了不必要的复杂性。 $.ajax已经退货,因此没有理由再创建另一个:

;(function($, window, undefined) { 
    function download() { 
     return $.ajax({ 
      data : {method:'getMyData'}, 
      dataType: 'json' 
     }); 
    } 

    var ajaxCall = download(); 

    ajaxCall.done(function(result) { 
      // do something with result 
    }); 

    ajaxCall.fail(function() { 
     // failed 
    }); 
})(jQuery, window); 
+0

OMG。返回$ .ajax()。辉煌! – 2013-04-07 19:37:40

+0

有没有方法可以说没有链接,无法完成.done? – 2013-04-07 19:39:03

+0

@Phillip - 稍微改变了答案! – adeneo 2013-04-07 19:51:03