2

我正在尝试使用 jquery 进行登录。应该对文本字段进行验证以回显错误消息。如果表单已完全验证,则 jquery 中的函数应更新 div,其中有输入表单并将其更改为会话名称。但是有一个问题,当发布的表单被验证然后 div 保持为空,没有会话名称。

HTML:

<html>
<head>
<script type="text/javascript" src="jquery-1.8.3.min.js"></script>
<script type="text/javascript">
jQuery(function(){
    jQuery('#form').submit(function(){
        jQuery.ajax({
            type: 'POST',
            url: jQuery('#form').attr('action'),
            data: jQuery('#form').serialize(),
                success: function(data){
                    if(data == 'success'){ 
                        jQuery('#user').load(location.href+' #user>*');
                    }else{
                        jQuery('#info').html(data);
                    }                   
                }
        });
        return false;
    });
});
</script>
</head>
<body>
<div id="user">
<div id="info"></div>
<?php
session_start();
if(isset($_SESSION['user'])){
echo $_SESSION['user'];
}else{
echo '
<form method="post" action="session.php" id="form">
<input type="text" name="user" />
<input type="submit" name="do" value="ok" />
</form>
';
}
?>
</div>
</body>
</html>

PHP:

<?php

$user = mysql_real_escape_string($_POST['user']);

if(empty($user)){
    echo 'psc';
}else{
    echo 'success';
    session_start();
        $_SESSION['user'] = $user;
}



?>
4

1 回答 1

0

我认为type: 'POST'在您的 ajax 调用中通常以小写形式完成:type: 'post'. 我不确定这是否是问题,但您可能想尝试一下。

除此之外,您的代码的另一个问题是您没有阻止提交表单。所以基本上你正在发送一个 ajax 消息,但随后会立即加载一个新页面,并在单击提交按钮时发生默认提交。我认为这具有加载空白页面的效果?

要解决此问题,您可以在submit处理程序中添加以下行:

jQuery('#form').submit(function(event){
   event.preventDefault();

请注意,我已将事件添加到处理程序参数,然后调用该preventDefault()方法以阻止表单实际提交。在处理程序中返回 false 不会为您执行此操作。

于 2012-11-29T23:30:04.280 回答