0

我有一个客户端 Web 应用程序,它在加载时会立即调用 api 端点以查看用户是否已通过身份验证。如果没有,则显示登录内容。如果用户通过身份验证,则显示其他信息。

在返回此信息之前,我不想显示任何内容。我最初的方法是使用同步调用,这似乎是正确的。但根据对这个问题的回答,这似乎是错误的方法:

同步 JSON 跨域?

如果是这样,那么我需要进行异步操作,然后停止直到返回数据。

我正在使用敲除在 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()

4

1 回答 1

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() {
    });
于 2013-07-02T23:37:23.733 回答