2010-03-25 55 views
1

好吧,對於我的生活,我無法理解爲什麼follwing代碼總是返回錯誤?我已經用Firefox調試,看看有什麼事情,但功能似乎總是返回false,即使拍攝條件的用戶名是0(假),這裏是jQuery代碼:jQuery/Asp.Net mvc用戶名查找

function CheckAvailability() { 
    showLoader(); 
    $.post("/Account/CheckUsernameAvailability", 
    { userName: $(profile_username).val() }, 
    function(data) { 
     var myObject = eval('(' + data + ')'); 
     var newid = myObject; 
     if (newid == 0) { 
      profile_username_error.removeClass("field_not_valid"); 
      profile_username_error.addClass("field_valid"); 
      $("#validUserName_msg").html("<font color='green'>Available</font>") 
      return true; 
     } 
     else { 
      profile_username_error.addClass("field_not_valid"); 
      profile_username_error.removeClass("field_valid"); 
      $("#validUserName_msg").html("<font color='red'>Taken</font>") 
      return false; 
     } 
    }); 
} 

我使用了/ Account/CheckUsernameAvailability來檢查一個給定的名字是否帶或不帶,(0)應該返回true,否則返回false。

回答

1

你似乎沒有被允許它獲得響應從動作回電。你需要做的是引發異步調用並等待回調返回。

 $.ajax(
     { 
      type: "POST", 
      url: "/Account/CheckUsernameAvailability", 
      data: "userName=" + $(profile_username).val(), 
      dataType: "json", 
      success: function(data) { 
       if (data.Success) { 
        // do success stuff 
       } 
       else { 
       // do failure stuff 
       } 
      } 
     }); 

然後調用的動作可以使用JsonResult返回一些json代碼。

public JsonResult CheckUsernameAvailability(string userName) 
    { 
     // do some checking with the Membership code 

     // this is just a simple class which can set the data and then 
     // be passed through to be sent back to the browser as Json 
     var result = new UiResult 
        { 
         Message = "Availble", 
         Success = true 
        }; 

     return Json(result); 
    } 

希望這會有所幫助。

1

在下面的代碼片段中,它看起來像是在創建一個對象(newid),然後測試該對象是否等於零。是不是總是會是假的?

var myObject = eval('(' + data + ')'); 
var newid = myObject; 
if (newid == 0) { 
    //stuff here 
} 

如果你的AJAX腳本真的只是返回以純文本的數字1,嘗試轉換數據作爲整數和測試對抗。

var newid = parseInt(data); 
if (newid == 0) { 
    //stuff here 
} 
1

該帖子是異步完成的,所以它是從你的函數返回,甚至調用post回調之前。您應該爲您的函數提供一個回調函數,在完成後可以調用該函數,並在每種情況下執行任何需要的操作。請注意,回調函數可以使用通常爲函數返回值的參數(true/false)。

另一種方法是切換到使用$ .ajax並將async選項設置爲true,然後捕獲值以返回到您在ajax回調函數內分配的局部變量中。

我會堅持回調想法,因爲使請求同步可以鎖定您的瀏覽器,直到它完成。

FWIW,我發現JSON解析器工作得很好 - 你不需要使用eval。只需將數據作爲整數值返回並使用即可。

function(data) { 
     if (data && data.ID == 0) { 
       ... 
       my_callback(true); 
     } 
     else { 
      ... 
       my_callback(false); 
     } 
     ... 

您的服務器端代碼看起來有點像:

 return Json(new { ID = user == null ? user.ID : 0 });