我正在使用JS中的模块模式创建应用程序。我创建了两个模块,并有以下代码:
var dataController = (function () {
var request = new XMLHttpRequest();
var getFilmes = function () {
request.onreadystatechange = function() {
if(request.readyState === 4) {
if(request.status === 200) {
var obj = JSON.parse(request.responseText);
return obj;
} else {
console.log('An error occurred during your request: ' + request.status + ' ' + request.statusText);
}
}
}
request.open('Get', 'http://localhost:8080/api/filmes/5b8947446f506266bc522f38');
request.send();
}
return {
filmes: function (){
return getFilmes();
}
};
})();
var controller = (function (dataCtrl) {
var preencheFilmes = function(){
var obj = dataCtrl.filmes();
console.log(obj);
}
return {
init: function(){
console.log("APP START");
preencheFilmes();
}
};
})(dataController, UIController);
controller.init();
问题是,当我在“ init”中调用preencheFIlmes时,无法从AJAX获得响应。但是我可以在dataController中得到结果。
有人可以帮助我吗?我正在学习如何使用这种模式。
非常感谢您。
答案 0 :(得分:1)
您的函数git reset --soft
是异步的,不返回任何内容。一个简单的解决方案是添加这样的回调参数:
getFilmes()
然后,当您要获取结果时,可以传递匿名回调函数:
var getFilmes = function(callback) {
request.onreadystatechange = function() {
if(request.readyState === 4) {
if(request.status === 200) {
var obj = JSON.parse(request.responseText);
callback(obj); // <-- calls the callback function
} else {
...
}
}
}
...
}
另一种选择是使用异步/等待功能,请参见https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function