Нет хорошей концепции «ожидания» при использовании XHR (хорошо, да, вы можете сделать его синхронным, но это будет сильно блокировать браузер). Вместо этого вы используете тот факт, что функции могут быть легко переданы в качестве параметров в JavaScript.
Ключевым моментом здесь является то, что определенная вами функция «success» не будет работать до тех пор, пока вызов не вернется с сервера, но остальная часть вашего javascript продолжает пускаться в пул, вызывая неопределенное предупреждение, которое вы видите запуск любого кода, который вызвал эту функцию и т. д.).
Вместо того, чтобы возвращать данные из функции, вы должны предупредить вызывающего функцию, когда данные поступят. Вы можете сделать это, добавив второй параметр, функцию, которая будет вызываться при завершении запроса к серверу:
function MakeCall(url, functionToRunWhenDataArrives) {
$.ajax({
url: url,
dataType: "text",
success: functionToRunWhenDataArrives
});
}
MakeCall('myurl.com', function(txt){
// do stuff with txt here!
});
Это тип шаблона, которому вы должны следовать каждый раз, когда делаете асинхронный запрос.