jQuery/Asp.Net mvc用户名查找
好吧,就我个人而言,我无法理解为什么下面的代码总是返回false??我已经用firefox进行了调试,以了解发生了什么,但是该函数似乎总是返回false,即使用户名的条件为0(false),以下是jquery代码:jQuery/Asp.Net mvc用户名查找,jquery,asp.net-mvc,Jquery,Asp.net Mvc,好吧,就我个人而言,我无法理解为什么下面的代码总是返回false??我已经用firefox进行了调试,以了解发生了什么,但是该函数似乎总是返回false,即使用户名的条件为0(false),以下是jquery代码: function CheckAvailability() { showLoader(); $.post("/Account/CheckUsernameAvailability", { userName: $(profile_username).val() },
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;
}
});
}
功能检查可用性(){
showLoader();
$.post(“/Account/CheckUsernameAvailability”,
{userName:$(profile_userName).val()},
功能(数据){
var myObject=eval(“(“+data+”)”);
var newid=myObject;
如果(newid==0){
配置文件\用户名\错误。removeClass(“字段\无效”);
profile_username_error.addClass(“字段_valid”);
$(“#validUserName_msg”).html(“可用”)
返回true;
}
否则{
profile_username_error.addClass(“字段_无效”);
配置文件\用户名\错误。removeClass(“字段\有效”);
$(“#validUserName_msg”).html(“take”)
返回false;
}
});
}
我正在使用/Account/CheckUsernameAvailability来检查给定的名称是否为take,它的not take(0)应返回true,否则返回false。在下面的代码段中,您似乎正在创建一个对象(newid),然后测试该对象是否等于零。这不是一直都是假的吗
var myObject = eval('(' + data + ')');
var newid = myObject;
if (newid == 0) {
//stuff here
}
如果ajax脚本实际上只是以纯文本形式返回数字1,请尝试将数据转换为整数并进行测试
var newid = parseInt(data);
if (newid == 0) {
//stuff here
}
post是异步完成的,因此它在调用post回调之前从函数返回。您应该向函数提供一个回调函数,在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 } );
你似乎不允许它从行动电话中得到回应。您需要做的是启动异步调用并等待回调返回
$.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);
}
希望这有帮助