У меня панель навигации на моем сайте, и он строится в некоторой цепи:Ajax обратного вызова в цепочке
// in Init method
nav
.hideContainer()
.fetchData()
.buildHTML()
.eventify()
.showContainer();
Это нормально, и отлично работает для меня. Но в методе fetchData
я использую локальные данные для загрузки (inline json). Но теперь мне нужно получить удаленные данные (от вызова ajax). Могу ли я сделать это без изменения метода Init
?
У меня была попытка сделать это с помощью синхронного вызова Ajax:
// in fetchData() method
var data;
$.ajax ({
async: false,
url : '/some/url/',
success : function(res) {
data = res;
}
});
return data;
Но я знаю, что это медленно - это блокирует браузер во время его загрузки.
Я знаю, что я могу изменить мой Init
метод, как в таком виде:
nav
.hideContainer()
.fetchData(function(){
nav.buildHTML().eventify().showContainer()
});
Но я хотел бы, чтобы не изменить Init
метод, я могу это сделать?
P.S. Думаю, я должен идти в направлении объекта Deffered
. Я прав?
Нет, вы не можете оставить init intact * и * ajax работать асинхронно. Точка его асинхронности заключается в том, что он немедленно вернется, так что Init не сможет работать так. – kubetz