2014-07-01 83 views
-2

我有一个小问题,我想检查一个用户是否通过AJAX POST登录到PHP然后运行其余的函数,不幸的是该函数的其余部分是正在运行,没有等待AJAX​​完成..所以这是个坏消息JavaScript没有等待AJAX​​请求完成运行

function checkLogin() { 
    dat = 'chl=1&x='+Math.random(); 
    $.ajax({ 
     url: "/action.php", 
     type: "POST", 
     data: dat, 
     success: function(data) { 
      if (data) 
       return data; 
      return 0; 
     }, 
     error: function(data) { 
      console.log('err'+data); 
      return; 
     } 
    });  
} 
function anotherFunction() { 
     logged = checkLogin(); // is the user logged in? 
     if (logged) { 
     // do other stuff 
     console.log('Logged in'); 
     } else { 
     console.log('Not logged in..'); 
     } 
} 

所以这是我的问题,它说记录是不确定的..有没有解决这个,除了使用setTimeout的,更多的东西“自然“在等待的时间?

+1

我建议将'if(logged)'逻辑放入AJAX“成功”回调中。 – showdev

回答

2

AJAX是异步的 - 在success:代码中执行。

-2

通过添加非同步参数使它成为一个同步请求,并将其设置为false [不recommneded]

$.ajax({ 
    url: "/action.php", 
    type: "POST", 
    data: dat, 
    asynch: false, 
    success: function(data) { 
     if (data) 
      return data; 
     return 0; 
    }, 
    error: function(data) { 
     console.log('err'+data); 
     return; 
    } 

[推荐]调用成功回调阿贾克斯您所需的方法调用

$.ajax({ 
    url: "/action.php", 
    type: "POST", 
    data: dat, 
    success: function(data) { 
     if (data) 
      return data; 
     yourDesiredFunctionHere(); 
     return 0;  

    }, 
    error: function(data) { 
     console.log('err'+data); 
     return; 
    } 
+1

asynch?这不是你正在寻找的参数。同样设置它是一个坏主意,重新考虑代码。 – rlemon

+0

@rlememon,编辑,谢谢 –

+2

asynch仍然不是属性名称;)您的'yourDesiredFunctionHere'函数也是在return语句之后,所以不会命中。 – rlemon