2011-11-22 73 views
1

我有一個奇怪的奇怪的問題中一個變量的值,這裏是我的JS代碼

function ValidateUser(username) { 
    var userExists = "somevalue"; 


    $.ajax({ 
     contentType: 'application/json, charset=utf-8', 
     type: "POST", 
     url: "/Controller/Validate", 
     data: JSON.stringify({ username: username }), 
     cache: false, 
     dataType: "json", 

     success: function (response) { 
      alert(response); 

      if (response == true) { 
       userExists = true; 
       alert("user exists: " + userExists); 
      } else { 
       alert("user exists: " + userExists); 
      } 
     }, 

     error: function (XMLHttpRequest, textStatus, errorThrown) { 
      alert('error'); 
     } 

    }); 

    return userExists; 

} 

很好,行動正常工作和正確驗證用戶,但函數總是返回「somevalue」.....什麼給了?我的直覺是它與功能範圍有關。但我該如何解決這個問題。

回答

2

因爲您在Ajax調用完成之前從返回中調用$.ajax的函數。

簡單的答案是在success函數中執行您需要執行的工作,可以使用立即函數(如現在),也可以將success設置爲現有函數。你可以使用jQuery's $.when function

+0

好,謝謝。 – sarsnake

+0

@sarsnake創建函數。用它作爲'成功'的價值。忍者編輯。 –

0

您也可以使用「asynch:false」設置,它會鎖定瀏覽器,並在請求處於活動狀態時禁用任何操作。這裏是你的代碼更改:

function ValidateUser(username) { 
    var userExists = "somevalue"; 


    $.ajax({ 
     contentType: 'application/json, charset=utf-8', 
     type: "POST", 
     url: "/Controller/Validate", 
     asynch: false, 
     data: JSON.stringify({ username: username }), 
     cache: false, 
     dataType: "json", 

     success: function (response) { 
      alert(response); 

      if (response == true) { 
       userExists = true; 
       alert("user exists: " + userExists); 
      } else { 
       alert("user exists: " + userExists); 
      } 
     }, 

     error: function (XMLHttpRequest, textStatus, errorThrown) { 
      alert('error'); 
     } 

    }); 

    return userExists; 

} 

您可以在這裏瞭解更多信息:這是有道理的jQuery.ajax()