2009-07-15 15 views
20

अभी AJAX का उपयोग करने के साथ सबसे बड़ी समस्या यह तथ्य है कि यदि मैं किसी पृष्ठ पर AJAX का उपयोग करता हूं, तो दूसरे पृष्ठ पर जाएं, फिर ब्राउज़र के बैक बटन का उपयोग करें जो AJAX के साथ बदल गया था।AJAX कॉल पर यूआरएल अपडेट करें?

मैंने उस समस्या को हल करने के लिए jQuery Addresss प्लगइन का उपयोग करने के बारे में सोचा है, लेकिन मुझे यह पसंद नहीं है कि यह पूरी तरह से इसे बदलने के बजाय "# whatever.html" के साथ URL को कैसे संशोधित करता है।

आदर्श रूप से, मैं क्या चाहता हूं कि यूआरएल से यह हो: "www.example.com/pash/" से "www.example.com/p:3/" जब मैं प्रासंगिक AJAX कॉल करता हूं ।

क्या यह सब संभव है?

+0

मैं नहीं मानता कि आप पूरी तरह से एक पृष्ठ पुनः लोड के लिए मजबूर कर के बिना वर्तमान URL बदल सकते हैं (कम से कम, एक विश्वसनीय तरीके से नहीं कि ब्राउज़रों में होगा)। मुझसे गलती भी हो सकती है। – inkedmn

+0

मुझे यकीन नहीं है कि आप क्या करना चाहते हैं .. क्या आप पेज पैरामीटर स्टोर करना चाहते हैं, ताकि आप नेविगेशन के माध्यम से किसी पृष्ठ की स्थिति को जारी रख सकें? – flesh

उत्तर

19

नहीं, यह संभव नहीं है। अपडेट: एचटीएमएल 5 इतिहास एपीआई के माध्यम से अब यह संभव है - razbakov's answer देखें।

मुझे आशा है कि आपको एहसास होगा कि आप एक बेहद मुश्किल समस्या का समाधान करने की कोशिश कर रहे हैं।

मान लें कि आपका यूआरएल लगता है कि आप करने के लिए

http://example/mypage/1/ 

ब्राउज़र प्रोग्राम के रूप में खिड़की स्थान बदलते हैं तो अपने हाथ में लेने और उस पृष्ठ पर नेविगेट करने की कोशिश करेंगे, आपकी कल्पना ajax कोड चला जाता है

http://example.com/mypage/ 

पसंद आता है !

तो विकल्प क्या है? आप यूआरएल खंड का उपयोग करते हैं।

मान लीजिए कि आप एक ऐसा URL करते हैं,

http://example.com/anotherpage/#section 

ब्राउज़र पहले लोड http://example.com/anotherpage/ और एक लंगर 'अनुभाग' नाम खोजने के लिए और उस स्थान पर स्क्रॉल करने के लिए कोशिश करेंगे। इस व्यवहार का उपयोग 'पता' प्लगइन द्वारा किया जाता है। यह समान है कि 'स्क्रॉल टू टॉप' लिंक कैसे काम करते हैं।

तो तुम पेज

http://example.com/mypage/ 

पर हैं और करने के लिए

http://example.com/mypage/#1 

ब्राउज़र URL को बदलने नया पृष्ठ लोड नहीं होगा बल्कि नामित लंगर खोजने की कोशिश '1' और उस के लिए स्क्रॉल करता है, तो लंगर।

भले ही आपने यूआरएल में टुकड़े जोड़ने में कामयाब रहे हों, इसका मतलब यह नहीं है कि काम पूरा हो गया है। यदि उपयोगकर्ता बैक बटन दबाता है, तो डोम रीसेट हो जाएगा और आपको उन टुकड़ों को पार्स करना होगा और डोम को फिर से बनाना होगा। यह निश्चित रूप से गैर-तुच्छ है।

19

यह HTML5 के साथ संभव है। आप उदाहरण के रूप में गिटहब या Vkontakte साइट का परीक्षण कर सकते हैं।

सर्वश्रेष्ठ उत्तर यहाँ है: Change the URL in the browser without loading the new page using JavaScript

इसमें कहा गया है कि आप उन उद्देश्यों के लिए history.pushState फ़ंक्शन का उपयोग कर सकते हैं। लेकिन यह समाधान केवल HTML5 संगत ब्राउज़र में काम करेगा। अन्यथा आपको हैश-विधि का उपयोग करने की आवश्यकता है।

2

pjax आधुनिक ब्राउज़र में यह सुंदरता से संभालता है।

+3

सुनिश्चित नहीं है कि पूर्ण पृष्ठ रीलोड को सुंदर माना जा सकता है। – clime

0

AJAX कॉल करने के बाद, हम history.pushState का उपयोग कर क्लाइंट URL अपडेट कर सकते हैं। कृपया नीचे दिए गए वाक्यविन्यास और उदाहरण

सिंटेक्स: history.pushState (obj, obj.Title, obj.Url);

उदाहरण:

var url = "http://example.com/mypage/" + "newParameter=newValue" 
history.pushState(undefined, '', url); 
संबंधित मुद्दे