Редактировать Извините, вы действительно имели в виду повесить (что вы сказали);Я и другие просто радостно читаем block .
Я заметил, что вы используете responseText
объекта XMLHttpRequest
, возвращенного $.ajax
напрямую.Я думаю, что даже с синхронным запросом я бы все еще использовал обратный вызов:
function loadLanguages(language){
var data = new Object();
data.language = language;
var dataString = $.toJSON(data);
var languageArr = /* ...some appropriate default value if the request fails... */;
$.ajax({
url: "/VID/ajax/loadtranslations.php",
data: ({data: dataString}),
async: false,
success: function(langSt) {
languageArr = $.evalJSON(langSt);
}
});
return languageArr;
}
Старый ответ:
Когда вы используете синхронный Ajax-запрос, на многихбраузеры (не только IE), пользовательский интерфейс становится полностью не отвечает во время запроса.В IE это особенно плохо, потому что это не просто ваша страница, а весь процесс браузера 1020 *, который заканчивается ожиданием - пользователь даже не может выйти и сделать что-то еще в другой вкладке.
Это, мягко говоря, приводит к ухудшению взаимодействия с пользователем.
Это происходит потому, что на данный момент JavaScript в веб-браузерах является однопоточным, а во многих браузерах этот поток является потоком пользовательского интерфейса.Даже в приложениях, не основанных на браузере, привязка потока пользовательского интерфейса для обработки без пользовательского интерфейса не идеальна.
Поэтому вы хотите избегать использования синхронных запросов ajax всякий раз, когда это возможно, и это почти всегда возможно (возможно, даже *).1027 * всегда возможно).Это включает в себя некоторый рефакторинг в вашем подходе, когда функция «А» запускает что-то, что позже завершается функцией «В» (вызов «успеха» при вызове ajax), но выполняет этот рефакторинг (а затем использует этот образ мышления в своем проектебудущее) значительно улучшает взаимодействие с пользователем.
До тех пор, пока веб-работники не будут широко внедрены, вам нужно экономно использовать этот единственный поток JavaScript и мыслить с точки зрения событий и обратных вызовов.Я обнаружил, что принуждение к этому в конечном итоге действительно улучшает мой код и меняет мой подход к другим средам в лучшую сторону.