ログインフォームのある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 を使用しない同じコードは正常に動作します。
ここで何が問題なのですか?