Я использую глобальные переменные для передачи вокруг ответа от вызова AJAX:AJAX: Ожидание ответа?
window.response = null; // most recent response from XMLHttpRequest
// the callback function for XMLHttpRequest
function userObjFromJSON() {
if (this.readyState == 4) {
var json = eval('(' + this.responseText + ')');
window.response = json;
}
else {
indicateLoading();
}
}
// loads the info for this username on the page
function loadUsernameInfo(username) {
clearPage();
getUserInfo(username);
var profile = window.response; // most recent json response (what if it hasn't come in yet?)
window.response = null;
if (profile) {
indicateLoaded(username);
fillInProfileInfo(profile);
getTweets(username);
var tweets = window.response; // most recent json response (what if it hasn't come in yet?)
if (tweets) {
fillInTweets(tweets, MAX_TWEETS);
var mentions = mentionedUsers(tweets, MAX_TWEETS);
fillInMentioned(mentions);
}
else {
indicateUnavailableTweets();
}
}
else {
indicateInvalidUsername(username);
}
}
Проблема заключается в том, что к тому времени, функция контроллера хочет начать заполнение информации, вызов AJAX не всегда вернулся еще. (Если я медленно прохожу через него в отладчике, он отлично работает.) Что я могу сделать, чтобы обойти это?
Я пытался что-то вроде этого:
getUserInfo(username);
while (window.response == null); // infinite loop here
var profile = window.response; // most recent json response
Но это только делает мой браузер не отвечает.
Я не решаюсь вызывать нужную функцию из обратного вызова, потому что я пытаюсь реализовать модель-view-controller. Вызов функции контроллера/просмотра из модели кажется, что она нарушит шаблон.
Я пытаюсь сделать модель-view-controller, и помещение вызова функции там нарушит это. –