为了整理我的应用程序,我正试图绕过RequireJS。
我有一些模块和一个main.js脚本。
在我的main.js中,我正在定义一个包含一些AJAX函数的模块,以进行基本的API调用。
在这个“API”模块中,我首先调用其中一个AJAX函数,在完成之后,需要在同一个“API”模块中调用不同的AJAX函数(因为这些是异步任务,我认为链接它们这样会好吗?!)。
但是,只是在同一模块中调用函数名称不起作用。
那么如何在同一个模块中调用函数呢?
以下是我的“API”模块的设置方式:
define(function() {
return {
ajaxCall_A: function() {
$.ajax({
// settings
}).done(function() {
// now call ajaxCall_B
ajaxCall_B(); // doesn't work!
});
},
ajaxCall_B: function() {
$.ajax({
// settings
}).done(function() {
// finished
});
}
}
}
答案 0 :(得分:3)
将对本地对象的引用添加到ajaxCall_A的以下更改将解决问题,但是您可能最好不要查看JQuery promises/deferreds,因为这是链接Ajax调用的更好方法。 / p>
define(function() {
return {
ajaxCall_A: function() {
var self = this;
$.ajax({
// settings
}).done(function() {
// now call ajaxCall_B
self.ajaxCall_B(); // doesn't work!
});
},
ajaxCall_B: function() {
$.ajax({
// settings
}).done(function() {
// finished
});
}
}
}
使用promises的简要示例(未经测试):
define(function() {
return {
ajaxCall: function() {
$.when(this.ajaxCall_A())
.then(this.ajaxCall_B())
.done(function() {
// finished
});
},
ajaxCall_A: function() {
return $.ajax({
// settings
});
},
ajaxCall_B: function() {
return $.ajax({
// settings
})
}
}
}
答案 1 :(得分:-1)
(function (define) {
return {
ajaxCall_A: function () {
$.ajax({
// settings
}).done(function () {
// now call ajaxCall_B
define.ajaxCall_B(); // it works now!
});
},
ajaxCall_B: function () {
$.ajax({
// settings
}).done(function () {
// finished
});
}
}
});
尝试使用这样的方法。