2

こんにちは、ajaxjsonリクエストに問題があります。リクエストが成功した場合でも、常にエラーが発生します。現在、私はこのコードを持っています:

function sumbitLoginForm(user, pass) {
    if (user.trim() == '' || pass.trim() == '') {
        alert("You must enter username and password!");
    } else {
        $.ajax({
            type : 'POST',
            url : 'https://url.php',
            dataType : 'json',
            data : {
                userlogin : user,
                userpass : pass
            },
            contentType: "application/json;",
            success : function(data) {
                $("#images").html("uspeshno");
            },
            error : function(data) {
                $("#images").html("greshka");
            }
        });
        }

    return false;
}

$(document).ready(function() {
    clearPageInputs();
    $("#submitButton").click(function() {
        sumbitLoginForm($("#username").val(), $("#password").val());
    });
});

入力したユーザー名とパスワードに関係なく、常にエラーが発生します。しかし、リクエストのステータスは変化しています。正しいユーザーを入力してパスすると、ステータス302が一時的に移動しますが、間違ったユーザーを入力するかパスすると、ステータス200OKが表示されます。私は何が間違っているのですか?

4

1 に答える 1

0

PRG パターンと Ajax

ユーザー ID とパスワードが検証されない場合、サーバーが HTTP 200 ステータス コードを返すようです。HTTP エラー コードはアプリケーション エラー用ではなく、HTTP プロトコル エラー用であるため、これは適切な動作です。

ユーザー ID とパスワードが正常に一致すると、別のページにリダイレクトされます。これも通常の動作です。たとえば、他の人がバック キーを使用してログイン資格情報を再利用できないようにするためです。

これは、Post/Redirect/Get パターンと呼ばれます。

参照: http://en.wikipedia.org/wiki/Post/Redirect/Get

問題は、PRG パターンが Ajax アプリケーションで適切に機能しないことです。リダイレクトはブラウザで処理する必要があります。したがって、jQuery コードに対して透過的です。Ajax html 応答は、302 の Location ヘッダーに記載されているページになります。Ajax アプリケーションは、リダイレクトされていることを認識できません。だからあなたは立ち往生しています。

私のプロジェクトの 1 つで、サーバー側でこれを解決しました。Ajax 呼び出しを検出した場合、リダイレクトではなく、通常の 200 応答を送信します。これは、サーバー コードにアクセスできる場合にのみ機能します。

Ajax 呼び出しのリダイレクトを変更できない場合は、応答ヘッダーまたは html を解析して、リダイレクトされているかどうかを確認し、それに応じて行動することができます。おそらくログインによって Cookie が設定されるので、その Cookie の存在を探してみてください。

于 2012-09-11T11:44:47.567 に答える