2012-02-28 128 views
1
var ajaxStuff = (function() { 

    var doAjaxStuff = function() { 
     //an ajax call 
    } 

    return { 
     doAjaxStuff : doAjaxStuff 
    } 

})(); 

有什么办法来使用这种模式,并从调用我的方法时成功的ajaxcall获取响应?就像这样:Javascript模块模式,ajax函数回调

ajaxStuff.doAjaxStuff(successHandler(data){ 
    //data should contain the object fetched by ajax 
}); 

希望你明白,否则我会详细说明。

+0

为什么不只是'.ajax('url')。success(function(data){...});'? – zzzzBov 2012-02-28 22:05:13

回答

3

两件事情: 1.参数添加到doAjaxStuff功能。 2.当调用doAjaxStuff,传入一个匿名函数(或函数的名称)

var ajaxSuff = (function() { 

var doAjaxStuff = function(callback) { 
    // do ajax call, then: 
    callback(dataFromAjaxCall); 
} 

return { 
    doAjaxStuff : doAjaxStuff 
} 

})(); 

// calling it: 

ajaxStuff.doAjaxStuff(function(data){ 
    //data should contain the object fetched by ajax 
}); 
1

就让doAjaxStuff接受回调:

var doAjaxStuff = function(callback) { 
    // an ajax call 
    // Inside the Ajax success handler, call 
    callback(response); // or whatever the variable name is 
} 

根据您的总体目标,你也可以使用deferred objects代替(或补充)。这使得你的代码高度模块化。例如:

var doAjaxStuff = function() { 
    // $.ajax is just an example, any Ajax related function returns a promise 
    // object. You can also create your own deferred object. 
    return $.ajax({...}); 
} 

// calling: 

ajaxStuff.doAjaxStuff().done(function(data) { 
    // ... 
}); 
0

我认为你需要阅读jQuery的文档的jQuery.ajax。你可以打一个简单的电话:

$.ajax('/path/to/file').success(function (data) { 
    doStuff(); 
})