www वर्तमान राज्य से मिलान करने के लिए AJAX ऐप में पता बार यूआरएल संशोधित करें




www kundli milan ast koot (7)

मैं एक AJAX ऐप लिख रहा हूं, लेकिन जैसे ही उपयोगकर्ता ऐप के माध्यम से चलता है, मैं पेज रीलोड की कमी के बावजूद पता बार में यूआरएल अपडेट करना चाहता हूं। असल में, मैं चाहता हूं कि वे किसी भी समय बुकमार्क करने में सक्षम हों और इस प्रकार वर्तमान स्थिति में वापस आएं।

लोग AJAX ऐप्स में रीस्टफुलनेस को बनाए रखने के तरीके को कैसे प्रबंधित कर रहे हैं?


यह केविन ने जो कहा उसके समान है। आप अपने क्लाइंट स्टेटस को कुछ जावास्क्रिप्ट ऑब्जेक्ट के रूप में प्राप्त कर सकते हैं, और जब आप राज्य को सहेजना चाहते हैं, तो आप ऑब्जेक्ट को क्रमबद्ध करें (जेएसओएन और बेस 64 एन्कोडिंग का उपयोग करके)। फिर आप इस स्ट्रिंग में href के खंड को सेट कर सकते हैं।

var encodedState = base64(json(state));
var newLocation = oldLocationWithoutFragment + "#" + encodedState;

document.location = newLocation; // adds new entry in browser history
document.location.replace(newLocation); // replaces current entry in browser history

पहला तरीका नए राज्य को एक नए स्थान के रूप में पेश करेगा (इसलिए बैक बटन उन्हें पिछले स्थान पर ले जाएगा)। उत्तरार्द्ध नहीं करता है।


ऐसा करने का तरीका location.hash हेरफेर करना है जब AJAX अपडेट एक राज्य परिवर्तन में परिणाम देता है जिसे आप एक बुद्धिमान यूआरएल चाहते हैं। उदाहरण के लिए, यदि आपके पृष्ठ का यूआरएल है:

http://example.com/

यदि क्लाइंट साइड फ़ंक्शन ने इस कोड को निष्पादित किया है:

// AJAX code to display the "foo" state goes here.

location.hash = 'foo';

फिर, ब्राउज़र में प्रदर्शित यूआरएल को अपडेट किया जाएगा:

http://example.com/#foo

यह उपयोगकर्ताओं को पृष्ठ की "foo" स्थिति को बुकमार्क करने और राज्यों के बीच नेविगेट करने के लिए ब्राउज़र इतिहास का उपयोग करने की अनुमति देता है।

इस तंत्र के साथ, आपको उचित प्रारंभिक स्थिति बनाने और प्रदर्शित करने के लिए जावास्क्रिप्ट का उपयोग करके क्लाइंट पक्ष पर यूआरएल के हैश हिस्से को पार्स करने की आवश्यकता होगी, क्योंकि खंड पहचानकर्ता (# के बाद भाग) को नहीं भेजा जाता है सर्वर।

यदि आप jQuery का उपयोग कर रहे हैं तो बेन आलमैन की हैशनल प्लगइन बाद में हवा बनाता है।


SWFAddress फ्लैश और जावास्क्रिप्ट परियोजनाओं में काम करता है और आपको बुकमार्क करने योग्य यूआरएल (ऊपर वर्णित हैश विधि का उपयोग करके) बनाने के साथ-साथ आपको बैक-बटन समर्थन भी देता है।

http://www.asual.com/swfaddress/


अजाक्स का उपयोग करते समय लेखक अपने आगंतुक को फिर से लोड या रीडायरेक्ट करना चाहता है। लेकिन एचटीएमएल 5 के pushState / replaceState का उपयोग क्यों नहीं करें?

आप जितनी चाहें उतनी एड्रेसबार को संशोधित करने में सक्षम होंगे। AJAX के साथ प्राकृतिक दिखने वाले यूआरएल प्राप्त करें।

मेरे नवीनतम प्रोजेक्ट पर कोड http://iesus.se/ : http://iesus.se/


Book.cakephp.org जैसी साइटों को देखें। यह साइट हैश का उपयोग किए बिना यूआरएल को बदलती है और AJAX का उपयोग करती है। मुझे यकीन नहीं है कि यह वास्तव में कैसे करता है लेकिन मैं इसे समझने की कोशिश कर रहा हूं। अगर कोई जानता है, तो मुझे बताएं।

एक निश्चित परियोजना के भीतर एक नेविगेट करते समय भी github.com।


Window.location.hash विधि चीजों को करने का पसंदीदा तरीका है। इसे कैसे करें, इसके बारे में स्पष्टीकरण के लिए, अजाक्स पैटर्न - अद्वितीय यूआरएल

यूयूआई के पास इस पैटर्न का एक मॉड्यूल के रूप में कार्यान्वयन है, जिसमें हैश का उपयोग करके पते को दोबारा लिखने के साथ-साथ बैक बटन प्राप्त करने के लिए आईई विशिष्ट कार्य आसपास भी शामिल है। यूयूआई ब्राउज़र इतिहास प्रबंधक

अन्य ढांचे के समान कार्यान्वयन भी हैं। महत्वपूर्ण बात यह है कि यदि आप इतिहास को पुनः लिखने के साथ इतिहास को काम करना चाहते हैं, तो अलग-अलग ब्राउज़रों को इसे संभालने के विभिन्न तरीकों की आवश्यकता होती है। (यह पहले लिंक आलेख में विस्तृत है।)

आईई को एक आईफ्रेम आधारित हैक की आवश्यकता है, जहां फ़ायरफ़ॉक्स एक ही विधि का उपयोग करके डबल इतिहास का उत्पादन करेगा।


जांचें कि क्या उपयोगकर्ता पृष्ठ में है, जब आप यूआरएल बार पर क्लिक करते हैं, जावास्क्रिप्ट का कहना है कि आप पेज से बाहर हैं। यदि आप यूआरएल बार बदलते हैं और उसके अंदर '#' प्रतीक के साथ 'ENTER' दबाते हैं तो आप माउस कर्सर के साथ मैन्युअल रूप से पृष्ठ पर क्लिक किए बिना पृष्ठ में फिर से जाते हैं, फिर जावास्क्रिप्ट से एक कीबोड इवेंट कमांड (document.onkeypress) यह जांचने में सक्षम हो कि क्या यह पुनर्निर्देशन के लिए जावास्क्रिप्ट दर्ज है और सक्रिय है। आप यह जांच सकते हैं कि उपयोगकर्ता window.onfocus के साथ पृष्ठ में है या नहीं और जांचें कि वह window.onblur के साथ बाहर है या नहीं।

हाँ, यह संभव है।

;)







address-bar