2017-11-15 6 views
0

現在、ナビゲーションバーはAJAXを使用して新しいページをロードし、window.pushState()を使用してAJAXが成功するとURLを更新します。ロード中のページ状態を設定します(GETリクエスト中)?

私は、バック/フォワードイベントが私のpopstateリスナーが処理できる状態になるように、取得リクエストでページ状態をプッシュする必要があることを認識しました。

私のサーバーが応答するHTMLに次のスクリプトを挿入するだけでいいですか?

<script> 
    window.pushState(state, null, null); 
</script> 

または(GETへの)応答で状態をプッシュする方法はありますか?

EDIT:ユーザーはdomain.com/ - を入力し、navbarのリンクをたどります(AJAXは新しいコンテンツを読み込みます)。現在、ユーザーが戻るボタンを押した場合は何も起こりません。

答えて

0

あなたはソリューションに非常に近いです。 window.history.pushStateを使用してURLを変更することができます。

// Call this function when you get response with url 
function processAjax(response, url){ 
    // Get whatever you want from response and push it in state 
    document.title = response.pageTitle; 
    // You can push other information here also 
    window.history.pushState({"pageTitle": response.pageTitle}, response.pageTitle, url); 
} 

負荷の状態を設定するために、単にURLで三番目のパラメータなしwindow.history.pushStateを呼び出します。

pushStateを使用すると、ページを再読み込みせずにURLが変更されることに注意してください。これは私が理解している通りだと思います。

この後には、ナビゲーションの変更を検出するために、window.onpopstateイベントに耳を傾けることができます。

window.onpopstate = function(e) { 
    if (e.state) { 
     var pageTitle = e.state.pageTitle; 
     // Or alternatively get other information and do whatever you want with it 
    } 
} 

参考:MDN

+0

はいああ、私のAJAXは、すでに私が欲しいことwindow.historyを与えるための方法である、ことを処理しますユーザーが単にURLにアクセスしたときの状態。 domain.com/gallery –

+0

私は答えを編集しました。基本的にurlである3番目のパラメータを指定せずにpushStateを呼び出すと、状態が設定されます。私は、コンソールでこれを試してみましたが、それが動作していることを確認することができます。 – apsdehal

+0

@OliverGiess動作しましたか? – apsdehal

関連する問題