2012-02-29 74 views
7

故障檢索數據我可以設置數據到History.js的State.data,就像這樣:使用History.js的HTML5 pushState。從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

我看不出有什麼毛病State.data,當你發出一個pushState的,請確保您調用History.js方法:

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

其中:

  • 第一參數=>數據
  • 第二參數=>名稱
  • 第三個參數=>的URL

看來你不及格的狀態,當且僅當你調用History.pushState數據只存在。當您直接訪問URL(/?state = 1)時,您在該狀態中將沒有數據,只有在通過History.pushState按下狀態時向後/向前導航時,數據纔可用。

注意事項:確保您的navigationInProgress變量已修復,您不希望它在那裏停滯。在收聽錯誤回調時$ .get請求失敗時重置它。當你的pushNewUrl爲false時,重置navigationInProgress屬性。

+0

謝謝穆罕默德,請問我,你是否曾經在pushState的第三個參數中使用過一個包含阿拉伯語單詞的URL。 http://stackoverflow.com/questions/16259226/history-js-pushstate-and-arabic-words-in-urls – 2013-04-28 04:01:50

+0

我有同樣的問題,我可以設法只發送狀態參數的數據,如果我嘗試保存任何我無法檢索的東西。我認爲這是個問題 – 2015-01-29 10:13:44