我有一个客户端Web应用程序,在加载后,会立即调用api端点以查看用户是否已通过身份验证。如果没有,则显示登录内容。如果用户已通过身份验证,则会显示其他信息。
在返回此信息之前,我不想显示任何内容。我最初的方法是使用同步调用,这似乎是正确的。但根据对这个问题的回答,这似乎是错误的方法:
Synchronous JSON cross-domain?
如果是这样,那么我需要做异步然后停止,直到返回数据。
我正在使用knockout在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()
的电话?
答案 0 :(得分:0)
我认为问题是你立即返回$ .ajax而不是使用.done
函数,这对我有用:
var go = $.ajax({
type: 'POST',
data: {fof: 'bar'}
})
.done(function(results) {
// Code here won't execute until response received from AJAX
})
.fail(function(msg) {
console.debug('Error:');
console.debug(msg);
})
.always(function() {
});