如何等待jquery请求返回响应?

时间:2013-07-02 23:32:38

标签: jquery asynchronous knockout.js

我有一个客户端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()的电话?

1 个答案:

答案 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() {
    });