2012-02-29 29 views
7

tôi có thể thiết lập dữ liệu vào State.data của History.js, như thế này:HTML5 pushState bằng cách sử dụng History.js. Rắc rối lấy dữ liệu từ 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;    
     }); 
    } 

Nếu tôi đặt một breakpoint trên báo cáo kết quả window.History.pushState, trong Chrome, Tôi có thể thấy rõ ràng pushStateData có giá trị mong muốn.

Tuy nhiên, khi tôi cố gắng để lấy dữ liệu:

$(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); 
     } 
    }); 

Khi tôi đặt một breakpoint trên báo cáo kết quả RetrievePageResults, Đối tượng State.data không còn có bất kỳ giá trị tôi đặt. State.data được định nghĩa, và không phải là null, nhưng nó là một đối tượng rỗng mà không có bất kỳ giá trị rõ ràng nào.

Cảm ơn, Scott

Trả lời

5

tôi không thấy bất cứ điều gì sai trái với State.data, khi bạn phát hành một pushState, chắc chắn bạn gọi phương thức History.js:

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

đâu:

  • Đầu tiên Parameter => Các dữ liệu
  • Second Parameter => tên
  • Thông số thứ ba => Địa chỉ

Dường như bạn không chuyển trạng thái và dữ liệu sẽ chỉ xuất hiện khi và chỉ khi bạn gọi History.pushState. Khi bạn truy cập URL trực tiếp (/? State = 1), bạn sẽ không có dữ liệu ở trạng thái, dữ liệu sẽ chỉ có sẵn khi điều hướng trở lại/chuyển tiếp trong khi đẩy trạng thái qua History.pushState.

lưu ý bên: Đảm bảo điều hướng của bạnBiến biến cố định được sửa, bạn không muốn nó bị dừng ở đó. Đặt lại nó khi yêu cầu $ .get thất bại khi nghe lệnh gọi lại lỗi. Và khi pushNewUrl của bạn sai, hãy đặt lại thuộc tính navigationInProgress.

+0

Cảm ơn bạn Mohamed, xin vui lòng tôi muốn hỏi bạn, có bao giờ bạn sử dụng trong tham số thứ ba của pushState một URL có chứa các từ tiếng Ả Rập. http://stackoverflow.com/questions/16259226/history-js-pushstate-and-arabic-words-in-urls –

+0

Tôi có cùng một vấn đề và tôi có thể quản lý chỉ gửi thông số trạng thái trong dữ liệu và nếu tôi cố gắng tiết kiệm bất cứ điều gì khác tôi không thể truy xuất nó. Tôi nghĩ đó là câu hỏi –

Các vấn đề liên quan