2011-01-11 130 views
1

我试图用以下代码验证用户名是否存在或不存在。但它以某种方式不起作用,以防止现有的用户名。 **注意:checkusr2.php是一个简单的php来检查数据库中的用户名。关于用户名验证的JQuery .ajax()

function verifyUser() { 
    var usr = $("#username").val(); 
    $.ajax({ 
     type: "POST", 
     url: "checkusr2.php", 
     data: "username="+ usr, 
     success: function(msg) { 
      $("#txtHint").ajaxComplete(function(event, request, settings){ 
       FormErrors = false; 
       if(msg == 'OK') { 
        FormErrors = true; 
        $('#formElem').data('username',FormErrors); 
       } else { 
        $('#formElem').data('username',FormErrors); 
       } 
      }); 
     } 
    }); 
} 

/**调用函数进行检查。 **/

verifyUser(); 
if($('#formElem').data('username')){ 
    alert('Username exist, please try another username.'); 
    return false; 
} 
+0

发布PHP代码。 – 2011-01-11 18:01:07

回答

1

使用像Charles,Fiddler,WireShark等http代理来查看您发送的ajax请求并验证响应是否您期望的。

首先,您正在进行异步调用(Ajax中的A)以获取用户名是否存在的响应。在您调用verifyUser后立即调用verifyUser调用后立即执行检查,并且checkusr2.php的请求可能实际上可能已经返回,也可能没有实际返回。

我也从来没有见过成功处理程序中的ajaxComplete集。我想你可能要改变这样的:

function verifyUser() { 
    var usr = $("#username").val(); 
    $.ajax({ 
     type: "POST", 
     url: "checkusr2.php", 
     data: "username="+ usr, 
     success: function(msg) { 
      if(msg != 'OK') { 
       alert('Username exists, please try another username.'); 
       $("#username").val(""); 
      } 
     }; 

    }); 
} 
+0

谢谢一堆。它完美的作品。我会尝试那些http代理你推荐^^ – 2011-01-11 18:29:49

0

你的问题是试图同步使用verifyUser。代码看起来相当合理,问题是$ .ajax使用XMLHTTPRequest异步执行。这意味着您的代码紧跟在调用verifyUser之后不能依赖于其完成的副作用。

你需要做的是早些时候运行verifyUser回调(比如说,当用户不关注用户名字段时),这样当提交时你已经得到了结果。

例如:

$('#username').blur(function() { verifyUser() }); 

进一步的变化将是预防,而不是提交,就可以使verifyUser显示一个div消息字段旁边当用户名无效。你会做出这些改变你的处理程序:

  if(msg == 'OK') { 
       FormErrors = true; 
       $('#username_invalid').show(); 
      } else { 
       $('#username_invalid').hide(); 
      } 

然后,你可以显示用户名不能立即选择用户,而无需浪费时间提交。

0

试试这个

$("#txtHint").ajaxComplete(function(e, xhr, settings) { 
    if (settings.url == 'ajax/test.html' && xhr.responseHTML=="Ok") { 
       FormErrors = true; 
       $('#formElem').data('username',FormErrors); 
      } else { 
       $('#formElem').data('username',FormErrors); 
      } 
}) 
0

谢谢你带了这个.ajaxComplete(),我不知道。我认为这对我将来会有很大的帮助。
但无论如何,我不认为这是你想要在这种特殊情况下使用什么:

function verifyUser() { 
    var usr = $("#username").val(); 
    $.ajax({ 
    type: "POST", 
    url: "checkusr2.php", 
    data: {'username':usr}, 
    success: function(msg) { 
     if (msg != 'OK') { 
     alert('Username exist, please try another username.'); 
     return false; 
     } 
    }); 
    }); 
} 

要执行后Ajax调用必须作为Ajax功能的回调来传递的功能,否则,即使将它放在Ajax函数之后,它也会在服务器响应之前执行。

+0

感谢您的快速和准确的响应。 – 2011-01-11 18:34:09