2013-03-30 82 views
1

這是我的代碼。我想獲得「國旗」,但「國旗」總是「假」。即使程序執行爲「flag = true」,「flag」在返回時變爲「false」。我如何從$ .ajax()獲得實際價值?請幫幫我。由於

function checkUserName() { 
var name = document.getElementById("userName").value; 
var namemsg = document.getElementById("userNameMsg"); 
var flag=false; 
if (name == "") { 
    flag=false; 
} else { 
    $.ajax({ 
     type : "POST", 
     url : "/vclub/verify/checkUserName.do", 
     dataType : "json", 
     data : "userName=" + name, 
     success : function(data) { 
      if (data == true) { 
       flag=true; 
      } else { 
       flag=false; 
      } 
     } 
    }); 
} 
alert(flag); 
return flag; 

}

回答

3

由於AJAX是異步的,你需要使用一個回調。此時您在代碼結束處返回標誌後收到AJAX響應。關鍵是successreturn flag之前沒有被調用,因爲附加到success的匿名函數僅在從url收到響應時被調用。請注意,由於您可能會也可能不會運行AJAX請求,因此您可以立即提供返回(如果該名稱爲空字符串),您仍然需要使用回調函數。在這種情況下,回調將在標誌設置爲false後立即執行。否則,checkUserName可能會在AJAX返回之前完成。

function checkUserName(callback) { 
    var name = document.getElementById("userName").value; 
    var namemsg = document.getElementById("userNameMsg"); 
    var flag=false; 
    if (name == "") { 
     // Note a callback is needed even if we don't use AJAX (because we might) 
     flag=false; 
     callback(flag); 
    } else { 
     $.ajax({ 
      type : "POST", 
      url : "/vclub/verify/checkUserName.do", 
      dataType : "json", 
      data : "userName=" + name, 
      success : function(data) { 
       if (data == true) { 
        flag=true; 
       } else { 
        flag=false; 
       } 
       callback(flag); 
      } 
     }); 
    } 
} 

使用方法:當AJAX請求成功完成

checkUserName(function (flag) { 
    // Here, the flag variable is available, but will not run until "callback" is called above 
    alert(flag); 
}); 
+0

謝謝您的回答。我通過在$ .ajax()中添加「async:false」來解決問題。 – user1550968

+1

請務必閱讀有關使用該文檔的文檔:http://api.jquery.com/jQuery.ajax/ –

+0

也一定要在未來將答案標記爲正確答案,否則人們可能不願回答您的問題:) –

0

flag的價值會發生變化,因爲您分配給$.ajax功能success屬性的功能是一個回調。 事實上,您的alert(flag);代碼行將在執行success回調之前運行(當flag的值尚未更改時)。

如果您將alert(flag);移至success回調,您會看到它的值發生了變化。

我想你需要將callback();行也移到該函數中。

+0

謝謝〜我已經解決了這個問題。 – user1550968

0

async:false

function loadProcess(processId) { 
    var prc; 
    $.ajax({ 
     async: false, 
     url: '/processes/getprocess', 
     data: { 
      'id': processId 
     }, 
     success(result) { 
      prc = result; 
     }, 
     error(xhr) { alert(xhr.responseText); } 
    }); 
    return prc; 
} 
相關問題