2014-07-01 81 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