2010-03-25 57 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 });