Javascript模块模式,ajax函数回调
问题描述:
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
});
希望你明白,否则我会详细说明。
答
两件事情: 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
});
答
就让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) {
// ...
});
答
我认为你需要阅读jQuery的文档的jQuery.ajax。你可以打一个简单的电话:
$.ajax('/path/to/file').success(function (data) {
doStuff();
})
为什么不只是'.ajax('url')。success(function(data){...});'? – zzzzBov 2012-02-28 22:05:13