4

Ajax ログイン フォームを備えた Bootstrap モーダルがあります。エラーを表示し、 login.phpからの結果が header('Location: index.php');

私は次のように結果を処理します。

var hr = new XMLHttpRequest();
    // Set content type header information for sending url encoded variables in the request
    hr.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    // Access the onreadystatechange event for the XMLHttpRequest object
    hr.onreadystatechange = function() {
        if(hr.readyState == 4 && hr.status == 200) {
            var return_data = hr.responseText;
            document.getElementById("status").innerHTML = return_data;
        }
    }

問題は、ログインが成功し、header('Location: index.php');応答index.phpが で開かれている場合div.statusです。

PHPヘッダーをjavascriptのリダイレクトに変換する簡単な方法はありますか?

4

2 に答える 2

6

リクエストが ajax リクエストかどうかを検出できます。それが目的の場所を持つ json オブジェクトを返す場合、それ以外の場合は、典型的な php リダイレクトを行います。

<?php   
    function isAjax() {
        return !empty($_SERVER['HTTP_X_REQUESTED_WITH']) && strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest';
    }

    if(isAjax()) {
        echo json_encode(array("location" => "index.php"));
    } else {
        header("Location: index.php");
    }
?>

json オブジェクトを javascript に戻したら、次を使用してユーザーをリダイレクトします。

document.location = json.location;
于 2013-09-11T15:50:15.030 に答える
1

document.locationHTTP ヘッダーを送信する代わりに、javascript を使用して を書き換える必要があります。これにより、フル ページ リクエストからの従来のリダイレクト レスポンスと同じ基本的なエクスペリエンスがユーザーに提供されます。

于 2013-09-11T15:47:21.317 に答える