PHP 表单提交和 AJAX 验证


PHP form submission and AJAX validation

>编辑:如果我把它放在return false;document.getElementById('submit').disabled='disabled';就可以解决问题,但由于某些原因,当用户名未被占用时,它也会禁用该按钮。


以下是检查用户名可用性的基本脚本。

如果用户名已被占用,如何防止提交表单

理想情况下,我想弹出一个JS警报框。

我试图将其添加到 JS 中,但没有奏效:

document.getElementById('submit').disabled

我也试图在表单本身中添加onclick="return validate();",但也没有运气:表单仍然可以提交。

.HTML

<form id="edit" action="edit.php" method="post">
   <fieldset>       
     <label>Username</label><input type="text" class="input" name="username"      
     id="username"/><span id="status"></span> 
    <button type="submit" id="submit" value="add">Save</button>
   </fielset>
</form>

脚本

<script type="text/javascript">
$(document).ready(function() {
    $("#username").change(function() {
        var username = $("#username").val();
        var msgbox = $("#status");
        if (username.length >= 4) {
            $("#status").html('<img src="images/gif/ajax-loading.gif">');
            $.ajax({
                type: "POST",
                url: "ajax_check.php",
                data: "username=" + username,
                success: function(msg) {
                    if (msg == 'OK') {
                         msgbox.html('<img src="/images/yes.png">');
                         return true;
                    } else {
                        msgbox.html(msg);            
                        return false;
                    }
                }
            });
        } else {
            $("#status").html('<img src="/images/no.png">too long!');
            return false;
        }
        return false;
    });
});

edit.phpajax_check.php仅包含一些 SQL 查询。

此外,一些用户在他们的浏览器上禁用了 JavaScript,我该如何解决这个问题?

这应该可以解决问题。成功时重新启用该按钮,失败时禁用该按钮。

   if (msg == 'OK') {                       
            msgbox.html('<img src="/images/yes.png">');
            document.getElementById('submit').disabled = false;  //enable submit
      } else {                    
            msgbox.html(msg);            
            document.getElementById('submit').disabled = 'disabled';  //disable submit
      }

您可以添加到表单元素的属性

onsubmit="return validate();"

如果 JavaScript 被禁用,那么你对此无能为力。这就是为什么必须在服务器端应用数据验证/隔离的原因。