2011-08-23 59 views
0

嗨我有一個jQuery POST功能,我無法正確完成你能幫我嗎?如何檢查jquery文章的結果?

function submitlogin() { 
    var form = document.login; 
    var action = "chk_login"; 
    $.post("action.php", { 
     action: action, 
     user: form.user.value, 
     pass: form.pass.value 
    }, function(data) { 
     if (data=="loginok") 
      return true; 
     else 
      return false; 
    } 
    ); 
} 

的想法是,當我的登錄表單提交它得到action.php的支票。 我的函數submitlogin必須在用戶和傳遞正確時返回TRUE,如果他們錯誤則返回FALSE。您能幫我清除我的問題嗎?目前,當我設置警報(數據)時,將action.php中的文本傳出以便連接正確,但我的問題只是從post函數中得到TRUE或FALSE

回答

2

ajax請求的回調確實不關心的返回值:

$.post("action.php", 
    { 
     action: action, 
     user: form.user.value, 
     pass: form.pass.value 
    }, 
    function(data) 
    { 
     if(data=="loginok") 
      return true; 
     else 
      return false; 
    }); 

當您從您的回調說return true,沒有什麼jQuery庫檢查該值。它看起來像你試圖基本上按下按鈕時進行表單驗證檢查;您將事件模型與同步調用相混淆。

正在發生的事情是這樣的:

-> Call to submitLogin(); 
    -> Invokes jQuery POST Ajax Method 
    -> Immediately exits submitLogin 

-> When the POST request is complete, calls the callback 

你需要做什麼,大概是這樣的:

function submitlogin() 
{ 
    var form = document.login; var action = "chk_login"; 

    $.post("action.php", 
    { 
     action: action, 
     user: form.user.value, 
     pass: form.pass.value 
    }, 
    function(data) 
    { 
     if(data == "loginok") 
      $('#myForm').submit(); 
    }); 

    return false; 
} 
+0

是的我明白我的錯誤。感謝您的代碼,現在它完美無缺。 – Svetoslav

0

所有$.post首先是由自然ASYN因此函數不會等待爲它返回。第二件事是你試圖從post成功處理程序返回true/false,這是錯誤的。

您可以嘗試使用$ .ajax和async false。

function submitlogin() { 
    var form = document.login; var action = "chk_login"; 
    var returnVal = false; 
     $.ajax({ 
      url: "action.php", 
      async: false 
      data: {action: action, user: form.user.value, pass: form.pass.value}, 
      success: function(data){ 
       returnVal = (data=="loginok"); 
      } 
     }); 

    return returnVal; 
}