0

PHP で処理される HTML フォームがあり、それは単純なログイン スクリプトです。これは問題なく動作しますが、AJAX でエラーをキャッチしたいと考えています。基本的に、ログインをチェックする PHP 関数が false を返した場合、そのエラーを jQuery 経由で DOM に書き込む必要があります。ただし、AJAX でフォーム送信をキャッチすると、PHP ファイルがリダイレクトを停止します。PHP ファイルが false を返す場合にのみ、フォームのリダイレクトを停止したいと考えています。どんな助けでも大歓迎です。私が話していることを説明するためのコードを次に示します。

controller_login.js

$(document).ready(function(){

$('form.loginSubmit').on('submit',function(){


    var that = $(this),
        url=that.attr('action'),
        type=that.attr('method'),
        data={};

    that.find('[name]').each(function(index,value){ 
        var that=$(this), 
            name=that.attr('name'); 
            value=that.val(); 
            data[name]=value;
    });


    $.ajax({
        url: url,
        type: type,
        data: data,
        success: function(response){
            errorHandle(response);

        }


    });

return false;

});


});

function errorHandle(error)
{
    console.log(error);
}

これは、PHP エラーが発生した場合に最終的に DOM を変更するファイルです。今のところ、ログのみです。

checkLogin.php

if($verifySqlRequest==1){
    session_register("loginUsername");
    session_register("loginPassword");
    header("location:http://localhost/asd/dashboard.html");
    echo "login success!";  
}
else{
    echo "Wrong user name or password...";
}

これはログイン認証のほんの一部ですが、基本的には最後のエコーを に送信したいのですがcontroller_login.js、ログインが正常に認証された場合はリダイレクトを続行する必要があります。どんな助けでも大歓迎です!, ありがとう!

4

3 に答える 3

2

ブラウザーは、Ajax 呼び出しからの 302 または 301 (リダイレクト) に応答しません。そのコードで確実に応答できますが、スクリプトを介して手動でリダイレクトを処理する必要があります。

window.location.replace("http://localhost/asd/dashboard.html");
于 2013-09-18T03:18:01.313 に答える
2

または、このようにすることができます

> echo '<script>window.location.replace("http://localhost/asd/dashboard.html")</script>';

 $.ajax({
url: url,
type: type,
data: data,
success: function(response){
    $('#response_element').html(response);

}
于 2013-09-18T03:32:54.843 に答える
0

Ajax を使用するポイントは、ページのリロードを回避することです。ユーザーがログイン時にリダイレクトされる場合は、フォームを同期的に送信し、PHP にエラーを表示させることもできます。

議論のために言うと、Ajax 関数を実行してサーバーから返されたメッセージを表示したい場合は、次のようにしないでください。

<?php 
echo 'this is the message'; 
?>

あなたはするだろう

<?php
$response = array('message' => 'this is my message');
return json_encode($response);
?>

ただし、リダイレクトしてデータを返すことはできません。

于 2013-09-18T03:34:58.560 に答える