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'。これが問題かどうかはわかりませんが、試してみてください。

それとは別に、コードのもう1つの問題は、フォームの送信を妨げていないことです。つまり、基本的にajaxメッセージを送信しますが、送信ボタンをクリックすると発生するデフォルトの送信を含む新しいページをすぐにロードします。これは空白のページをロードする効果があると思いますか?

これを修正するには、submitハンドラーに次の行を追加します。

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

preventDefault()ハンドラーの引数にイベントを追加し、フォームが実際に送信されないようにするメソッドを呼び出したことに注意してください。ハンドラーでfalseを返しても、これは行われません。

于 2012-11-29T23:30:04.280 に答える