У меня есть клиентское веб-приложение, которое при загрузке немедленно вызывает вызов конечной точки api, чтобы узнать, аутентифицирован ли пользователь. Если нет, отображается материал для входа. если пользователь аутентифицирован, отображается другая информация.Как дождаться запроса jquery, чтобы вернуть ответ?
Я не хочу ничего показывать, пока эта информация не будет возвращена. Мой первоначальный подход состоял в том, чтобы использовать синхронный вызов, который кажется правильным. Но, основываясь на ответах на этот вопрос, кажется, что это неправильный подход:
Synchronous JSON cross-domain?
Если это так, то мне нужно сделать асинхронный, а затем остановить, пока данные не будут возвращены. Функция
Я использую нокаут, чтобы сделать вызов в Activate(), как это:
var activate = function() {
// get auth data
authPayload(dataservice.getAuthPayload());
if (!authPayload().isAuthenticated) {
// do stuff
} else if (authPayload().isAuthenticated === true){
// do other stuff
}
С getAuthPayload:
var getAuthPayload = function() {
var options = {
async: false,
url: apiEndpoint + 'api/authpayload',
type: 'GET',
dataType: 'json'
};
return $.ajax(options)
.then(querySucceeded)
.fail(queryFailed);
};
В настоящее время это работает синхронно, хотя, так что функция activate
не видит каких-либо данных ответа, так как он не дожидается, когда он вернется с сервера. приложение в настоящее время показывает счетчик, пока функция activate
не закроется. Как подождать по телефону до dataservice.getAuthPayload()
?
Просто чтобы прояснить, что происходит, Аякс команда возвращает обещание, которое имеет методы, такие как done(), fail() и always(), которые принимают функции обратного вызова. Затем переданные функции вызываются, когда задача async завершается успешно или не выполняется. – Soviut