7

次のように、History.js の State.data にデータを設定できます。

var pushStateData = {};

function RetrieveSearchResults(type, url, searchData) {//, showResetButton, 
controlToFocus, navDirection) {

    pushStateData = {
        SearchType : type,
        SearchData : searchData,
    };

    RetrievePageResults(true, url, pushStateData);
}

function RetrievePageResults(pushNewUrl, url, pushStateData) {
    navigationInProgress = true;
    if (pushNewUrl) {
        if (window.History) {
                window.History.pushState(pushStateData, null, url);                                            
        }

        $.get(url, pushStateData.SearchData, function (reply) {
            $("#search-results").html(reply);
            navigationInProgress = false;            
        });
    }

Chrome で window.History.pushState ステートメントにブレークポイントを設定すると、pushStateData に目的の値があることがはっきりとわかります。

ただし、データを取得しようとすると:

$(window).bind("statechange", function (e) {
        if (!navigationInProgress) { 
            var State = window.History.getState();

            if (window.console && window.console.log) {
                console.log("popstate", State, window.location.href);
            }

            RetrievePageResults(false, State.cleanUrl, State.data);
        }
    });

RetrievePageResults ステートメントにブレークポイントを設定すると、State.data オブジェクトに設定した値がなくなりました。State.data が定義されており、null ではありませんが、明白な値のない空のオブジェクトです。

ありがとう、スコット

4

1 に答える 1

5

State.data に問題はありません。pushState を発行するときは、必ず History.js メソッドを呼び出してください。

History.pushState({state:1}, "State 1", "?state=1");

どこ:

  • 最初のパラメータ => データ
  • 2 番目のパラメーター => 名前
  • 3 番目のパラメータ => URL

状態を渡していないようで、History.pushState を呼び出した場合にのみデータが存在します。URL に直接アクセスすると (/?state=1)、状態にデータはありません。データは、History.pushState を介して状態をプッシュしているときに前後に移動するときにのみ使用できます。

補足:navigationInProgress 変数が固定されていることを確認してください。そこで停止させたくありません。エラー コールバックをリッスンしているときに $.get リクエストが失敗したときにリセットします。pushNewUrl が false の場合は、navigationInProgress 属性をリセットします。

于 2012-08-11T23:29:30.030 に答える