2012-07-30 27 views
6

मैं वर्तमान में कोड यूग्निटर का उपयोग सुंदर यूआरएल रखने के लिए कर रहा हूं, और मेरे पास यह सिस्टम है जो मूल रूप से एजेक्स का उपयोग करता है ताकि आप जिम की खोज कर सकें।पुशस्टेट के बाद, दबाए जाने पर पृष्ठ को फिर से लोड कैसे करें?

इम जिम की एक सूची के बाद धक्का राज्य का उपयोग लोड किया जाता है, इस तरह:

example.com/list/search_key/pagination-page/sort-by/filters~seperated~by~that

जहां search_key क्षेत्र में शहर, राज्य या पड़ोस है, वे जिम खोजना चाहते हैं, और फिल्टर व्यक्तिगत चेकबॉक्स हैं।

क्या होता है, क्या मैं खोज के माध्यम से खोज कुंजी और प्रत्येक व्यक्तिगत चेकबॉक्स मान (या तो 1 या 0) भेजने के लिए .ajax का उपयोग करता हूं, फिर कोड इग्निटर ऊपर दिए गए जैसा यूआरएल उत्पन्न करने के लिए POST डेटा और PHP का उपयोग करता है। AJAX सफलता पुश यूआरएल बताता है कि PHP उत्पन्न होता है।

समस्या यह है कि यदि आप पेज -2 पर जाने के लिए पेजिनेशन का उपयोग करते हैं, और आप पेज -1 पर जाना चाहते हैं, तो स्वाभाविक रूप से आप ब्राउजर बैक बटन का उपयोग करने जा रहे हैं। समस्या यह है कि यह केवल एचटीई वर्तमान से पहले यूआरएल एड्रेस बार को यूआरएल में बैक करता है, यह वास्तव में पृष्ठों की सामग्री को नहीं बदलता है। मुझे पुरानी (पिछली) यूआरएल, या रीफ्रेश, या कुछ का उपयोग करके पेज को फिर से लोड करने की आवश्यकता है।

मैं यूआरएल डेटा का उपयोग कर फ़ॉर्म को पुनः सबमिट करने के लिए AJAX का उपयोग भी कर सकता हूं, लेकिन मुझे कोई संकेत नहीं है कि यह कैसे करें।

मैंने कुछ चीजों की कोशिश की है, लेकिन कुछ भी काम नहीं करता है। बहुत कुछ मैंने Google के पहले पृष्ठ पर सब कुछ करने की कोशिश की है, और सब कुछ वादा करता है लेकिन वास्तव में कुछ भी काम नहीं करता है।

क्या पृष्ठ को रीफ्रेश करने के लिए वैसे भी है, यदि कोई पुशस्टेट यूआरएल पिछले यूआरएल में बदल जाता है?

पुनश्च यहाँ महत्वपूर्ण बातें Ive की कोशिश की के कुछ:

<script type="text/javascript"> 
$(window).unload(function(e){ 
    e.preventDefault(); 
    alert("Back was pressed!"); 
}); 
// If this wouldve worked, it wouldve atleast alerted me that. 

// The code off this URL: http://www.mrc-productivity.com/techblog/?p=1235 

// Some of the codes off this URL: http://forum.jquery.com/topic/howto-force-page-reload-refresh-of-previous-page-when-back-button-is-pressed 

// A few others. 
</script> 

उत्तर

14

चूंकि आप अपने ajax सफलता विधि से राज्य बढ़ा रहे हैं, तो आप वापस बटन window.onpopstate पद्धति का उपयोग करके पता लगा सकते हैं।

ध्यान दें कि सिर्फ इतिहास.pushState() या history.replaceState() को कॉल करना एक पॉपस्टेट ईवेंट ट्रिगर नहीं करेगा। पॉपस्टेट ईवेंट केवल ब्राउज़र क्रिया करके ट्रिगर किया जाता है जैसे कि बैक बटन पर क्लिक (या जावास्क्रिप्ट में इतिहास.बैक() को कॉल करना)।

var stateObj = { foo: "bar" }; 
history.pushState(stateObj, "page 2", "bar.html"); 

window.onpopstate = function(event) { 
    if(event && event.state) { 
     // event.state.foo 
    } 
} 
+0

मैं अभी भी अवधारणा को समझ नहीं पा रहा हूं। मैं समझता हूं कि आपको ऑनपॉपेट पर कॉल करने की आवश्यकता है, लेकिन उपरोक्त कोड केवल तभी काम करता है जब आप आगे बटन दबाते हैं। मुझे यह पृष्ठ भी मिला: http://stackoverflow.com/questions/7888711/page-not-reloading-via-back-when-using-pushstate-onpopstate यदि आप अपने jsfiddle उदाहरण पर जाते हैं: http: // jsfiddle। नेट/pimvdb/CCgDn/1/यह उसके लिए काम करता है लेकिन अगर मैं कोड कॉपी/पेस्ट करता हूं, तो यह केवल "प्रारंभिक स्थिति" को अलर्ट करता है। मैं क्या गलत कर रहा हूं? –

+1

नोट मुझे काम करने के लिए सही चीज़ मिल गई है, लेकिन location.reload() जोड़ना; जहां आप event.state.foo डालते हैं जो मैं वही करना चाहता हूं, लेकिन बैक बटन दबाए जाने पर मुझे ऐसा करने की ज़रूरत है। –

+1

कोई बात नहीं। खराब उपयोगकर्ता ऑपरेशन त्रुटि। Lmao एक टन धन्यवाद। मैं मदद की सराहना करता हूं। Location.reload() के साथ पूरी तरह से काम करता है; –