2

这是我的代码。

.js

$(document).ready(function() {

    $("#username").focusout(function() {

        $.ajax({
            type:'post',
            url:site_url()+'/client/checkUserName',
            data:{'username':$("#username").val()},
            dataType:'json',
            success:function(result){
                if(result != 'false'){
                  $('#message').text('Username exists');  
                }

            }
        });  
    });

.html

<form id='form1'  method="post">
        <input type="text" name="username" id="username"/>
        <span id="message" style="color:red"></span>
        <input type="submit" value="submit" id="regis" class="btn"/>
</form>

它在聚焦时工作正常。如果用户名存在,如何使表单不提交?

假设表单中有一个隐藏字段说

   <input type="text" hidden id="type" value="<?php echo $type;?>">

然后,如果隐藏字段中存在值,则无需检查用户名是否已存在。

4

4 回答 4

0

如果您只检查用户名是否存在于 javascript 中,您的网站将不安全。黑客无需实际单击按钮或执行您的客户端代码即可进行提交。

这意味着您需要在提交已经发生时检查服务器端的用户名存在。在这种情况下,javascript 检查并没有什么好处。

您也不想为黑客提供一种方法来检查哪些用户名存在,哪些不存在。如果您在提交后检查,黑客不知道用户名是否无效,或者密码是否错误。

编辑:到目前为止,@КонстантинРекунов 提供了唯一可行的 javascript。但是,请参阅我在他的回答下关于解决方案的脆弱性的评论。任何像这样的解决方案本质上都是脆弱的。

这样做的唯一合理原因是在注册过程中建议替代方案。即使这样也是不好的做法。我建议您更改您的预期设计。

于 2012-12-12T16:42:34.183 回答
0

您可以简单地禁用提交按钮

$(document).ready(function() {

$("#username").focusout(function() {

    $.ajax({
        type:'post',
        url:site_url()+'/client/checkUserName',
        data:{'username':$("#username").val()},
        dataType:'json',
        success:function(result){
            if(result != 'false'){
              $('#message').text('Username exists');
              $('#regis').attr('disabled','disabled');
            } else {
              $('#regis').removeAttr('disabled');
            }
        }
    });  
});
于 2012-12-12T16:43:39.957 回答
0

您可能需要将您的 js 代码放在一个函数中并添加:return false;如果检查失败,则添加onsubmit = "[functionName]";.

于 2012-12-12T16:44:38.503 回答
0

您应该添加 return false like 以及调用函数的位置

 if(result != 'false'){
                  $('#message').text('Username exists'); 
                   return true; 
                    }
                    else
                    {
                      return false;
                    }
于 2012-12-12T16:49:51.100 回答