2012-02-29 10 views
7

से मुसीबत को पुन: प्राप्त डेटा मैं History.js की State.data में डेटा सेट कर सकते हैं, इस तरह:इतिहास.जेएस का उपयोग कर एचटीएमएल 5 पुशस्टेट। 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 विवरण पर एक ब्रेकपाइंट सेट, क्रोम में, मैं स्पष्ट रूप से देख सकता हूं कि 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 परिभाषित किया गया है, और शून्य नहीं है, लेकिन यह किसी खाली मूल्य के बिना एक खाली वस्तु है।

धन्यवाद, स्कॉट

उत्तर

5

मैं कुछ भी State.data, के साथ गलत नहीं दिख रहा है जब आप एक pushState जारी, सुनिश्चित करें कि आप History.js विधि कॉल करें:

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

कहाँ:

  • पहले पैरामीटर => डेटा
  • दूसरा पैरामीटर => नाम
  • तीसरा पैरामीटर => यूआरएल

यह अपने राज्य से गुजर रहा है, और डेटा केवल उपस्थित रहेंगे यदि और केवल यदि आप History.pushState फोन लगता है। जब आप सीधे यूआरएल पर जाते हैं (/? State = 1) आपके पास राज्य में कोई डेटा नहीं होगा, तो डेटा केवल इतिहास/पुशस्टेट के माध्यम से राज्य को दबाते समय पीछे/आगे नेविगेट करते समय उपलब्ध होगा।

साइड नोट: सुनिश्चित करें कि आपका नेविगेशन इन प्रोग्रेस वैरिएबल तय है, आप नहीं चाहते हैं कि यह वहां रुक जाए। त्रुटि कॉलबैक पर सुनते समय $ .get अनुरोध विफल होने पर इसे रीसेट करें। और जब आपका pushNewUrl झूठा है, नेविगेशनInProgress विशेषता को रीसेट करें।

+0

धन्यवाद मोहम्मद, कृपया मैं आपसे पूछना चाहता हूं, क्या आपने कभी पुशस्टेट के तीसरे पैरामीटर में अरबी शब्द वाले यूआरएल का उपयोग किया है। http://stackoverflow.com/questions/16259226/history-js-pushstate-and-arabic-words-in-urls –

+0

मुझे एक ही समस्या है और मैं डेटा में केवल राज्य param को भेजने का प्रबंधन कर सकता हूं, और यदि मैं कोशिश करता हूं कुछ और बचाओ मैं इसे वापस नहीं कर सकता। मुझे लगता है कि सवाल था –

संबंधित मुद्दे