0

ログインフォームのあるPHPページがあります。フォームがクリックされると、バックエンド検証が実行され、json がログイン検証のステータスを返します。

フォームの送信ボタンをクリックしたときに実行されるコード:

// When DOM is ready
$(document).ready(function(){       
    // When the form is submitted
    $("#status > li > form").submit(function(){

        // Hide 'Submit' Button
        $('#submit').hide();

        // Clear the error messages if any
        $('#error_response').html("");

        // 'this' refers to the current submitted form 
        var str = $(this).serialize();

        var ran_no = new Date().getTime();                  
        str += "&ran="+ran_no;

        // -- Start AJAX Call --
        $.ajax({ 
                type: "POST", 
                url: "process.php",  // Send the login info to this page
                data: str, 
                dataType:'json',
                success: function(msg){
                    $(document).ajaxComplete(function(event, request, settings){ 

                    // Hide Gif Spinning Rotator
                    $('#ajax_loading').hide();

                    // Show 'Submit' Button
                    $('#submit').show();

                    if(msg.error_array == "OK") // LOGIN OK?
                    {  
                    var login_response = '<li><div class="alert alert-success" id="ajax_response"><i class="icon-spinner icon-spin pull-left"></i> Succes...</div></li>';
                    // Replace the dropdownlist contents
                    $('#status').html(login_response); // Refers to 'status'
                    // After 3 seconds redirect the 
                    setTimeout('go_to_private_page()', 3000); 
                    }  
                    else // ERROR?
                     {  
                        var login_response = "";
                        $.each(msg.error_array,function(i,element)
                        {
                        login_response = "<div class=\"alert alert-error\">" + element + "<br>";
                        });
                        $('#ajax_response').html(login_response);
                     }  
                    });  
                    }  
                }); 
                // -- End AJAX Call --
        return false;
    }); // end submit event

    });

ログイン検証のために呼び出されている php ページが Json オブジェクトを返す

function procLogin(){
    global $session, $form;    
    /* Login attempt */

    // database call  
    $retval = $session->login($_POST['username'], $_POST['password'], isset($_POST['remember_me']));
    $results = array ();
    /* Login successful */
    if($retval){
        $results['error_array'] = array('OK');
        echo json_encode($results);
    }
    /* Login failed */
    else{
    $_SESSION['value_array'] = $_POST;
    $_SESSION['error_array'] = $form->getErrorArray();
    $results['value_array'] = $_POST;           //Holds submitted form field values 
    $results['error_array'] = $form->getErrorArray();   //Holds submitted form error messages  
    echo json_encode($results);
    }
}

ユーザーが最初から正常にログインすると、すべてが正常に機能します。

ユーザーが最初に無効なパスワードを入力して修正した場合でも、2 回目の試行で無効なパスワード メッセージが表示されます。

ajax / json を使用しない同じコードは正常に動作します。

ここで何が問題なのですか?

4

1 に答える 1

0

キャッシュの問題である可能性があります。追加してみてください:

cache: false

あなたのAjax呼び出しに。

于 2013-05-03T17:36:07.210 に答える