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);
    }
}

当用户从第一次成功登录时,一切正常。

如果用户第一次输入无效密码并更正它,他仍然会在第二次尝试时收到无效密码消息。

不使用 ajax / json 的相同代码可以正常工作。

这里有什么问题?

4

1 回答 1

0

这可能是缓存问题。尝试添加:

cache: false

到您的 Ajax 调用。

于 2013-05-03T17:36:07.210 回答