2013-07-02 42 views
0

我有一个客户端的web应用程序,加载时,立即打电话给一个API端点,看看用户是否通过身份验证。如果没有,则显示登录内容。如果用户被认证,则显示其他信息。如何等待jquery请求返回响应?

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

Synchronous JSON cross-domain?

如果是这样的话,我需要做的异步,然后暂停,直到返回的数据。

我使用淘汰赛拨打电话在激活()函数是这样的:

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

我相信这个问题是要退回$就立即代替使用.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() { 
    }); 
+0

只是为了澄清这是怎么回事,阿贾克斯命令返回它有一个承诺像done(),fail()和always()接受回调函数的方法。那些提供的函数会在异步任务成功完成或失败时调用。 – Soviut