2012-02-29 3 views
7

からデータを取得するトラブル:ヒストリ.jsを使用するHTML5 pushState。私はこのように、History.jsのState.dataにデータを設定することができます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;    
     }); 
    } 

私はwindow.History.pushStateステートメントにブレークポイントを設定した場合は、Chromeでの、私は明確に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ではありませんが、明らかな値のない空のオブジェクトです。

おかげで、 スコット

答えて

5

は、私はあなたがpushStateを発行したとき、あなたはHistory.jsメソッドを呼び出すことを確認し、State.dataと間違って何も表示されません。

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

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

それはあなたの状態を渡していないようだ、とのデータだけがHistory.pushStateを呼び出す場合にのみ存在します。 URLに直接アクセスすると(/?state = 1)、その状態にデータがない場合、データはHistory.pushState経由で状態をプッシュしながら前後にナビゲートするときにのみ利用可能になります。

サイドノート:あなたのnavigationInProgress変数が固定されていることを確認してください。あなたはそれがそこで停止しないようにしてください。エラーコールバックでリッスンするときに$ .get要求が失敗したときにリセットします。あなたのpushNewUrlがfalseのときは、navigationInProgress属性をリセットします。

+0

ありがとうMohamed、私はあなたに質問したいと思います。pushStateの3番目のパラメータで、アラビア語を含むURLを使用したことがありますか? http://stackoverflow.com/questions/16259226/history-js-pushstate-and-arabic-words-in-urls –

+0

私は同じ問題を抱えており、私はデータ内の状態パラメータのみを送信できます。私はそれを取り戻すことはできません他のものを保存します。私はそれが問題だと思う –

関連する問題