JavaScript在不等待AJAX请求完成的情况下运行

JavaScript在不等待AJAX请求完成的情况下运行,javascript,php,jquery,ajax,Javascript,Php,Jquery,Ajax,我有一个小问题,我想检查用户是否通过AJAX POST登录到PHP,然后运行函数的其余部分,不幸的是,函数的其余部分在运行时没有等待AJAX完成。。这是个坏消息 function checkLogin() { dat = 'chl=1&x='+Math.random(); $.ajax({ url: "/action.php", type: "POST", data: dat, success: functi

我有一个小问题,我想检查用户是否通过AJAX POST登录到PHP,然后运行函数的其余部分,不幸的是,函数的其余部分在运行时没有等待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,还有什么更自然的等待时间解决方案吗?

AJAX是异步的,请在success:code中执行它。

通过添加asynch参数使其成为同步请求,并将其设置为false[不推荐]

$.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调用的成功回调中调用所需的方法

    $.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;
    }

我建议将if日志逻辑放入AJAX success callback.asynch?这不是你要找的参数。将其设置为该值也是一个坏主意,请重新考虑代码。@rlemoon,edited,thanksasync仍然不是属性名称;另外,yourDesiredFunctionHere函数位于return语句之后,因此不会命中。