Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery/Asp.Net mvc用户名查找_Jquery_Asp.net Mvc - Fatal编程技术网

jQuery/Asp.Net mvc用户名查找

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() },

好吧,就我个人而言,我无法理解为什么下面的代码总是返回false??我已经用firefox进行了调试,以了解发生了什么,但是该函数似乎总是返回false,即使用户名的条件为0(false),以下是jquery代码:

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);
   }
希望这有帮助