jquery: पुनर्निर्देशित किए बिना यूआरएल पता बदलें?




ajax redirect (5)

आप जो भी पूछते हैं वह नहीं कर सकते (और लिंक की गई साइट बिल्कुल ठीक नहीं करती है)।

हालांकि, आप # चिह्न के बाद यूआरएल के हिस्से को संशोधित कर सकते हैं , जिसे खंड कहा जाता है, इस तरह:

window.location.hash = 'something';

टुकड़े सर्वर पर नहीं भेजे जाते हैं (इसलिए, उदाहरण के लिए, Google स्वयं http://www.google.com/ और http://www.google.com/#something बीच अंतर नहीं बता सकता), लेकिन वे हो सकते हैं अपने पृष्ठ पर जावास्क्रिप्ट द्वारा पढ़ें। बदले में, यह जावास्क्रिप्ट टुकड़े के मूल्य के आधार पर एक अलग AJAX अनुरोध करने का निर्णय ले सकता है, इस प्रकार यह है कि जिस साइट से आपने लिंक किया है वह संभवतः करता है।

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

पृष्ठ को पुनर्निर्देशित किए बिना मैं यूआरएल पता कैसे बदल सकता हूं?

उदाहरण के लिए, जब मैं नीचे इस लिंक पर क्लिक करता हूं:

<a href="http://mysite.com/projects/article-1" class="get-article">link</a>

मैं लिंक से यूआरएल ले जाऊंगा:

var path = object.attr('href');

यदि मैं इसे नीचे करता हूं, तो पृष्ठ को पुनर्निर्देशित किया जाएगा:

window.location = path;

मैं इस site तरह कुछ करना चाहता हूं, जब आप छवि पर क्लिक करते हैं, तो AJAX कॉल अनुरोधित पृष्ठ लाएगा और विंडो पर यूआरएल पता भी बदला जाएगा, ताकि आपके पास क्लिक करने के लिए एक रास्ता हो।


आप रीडायरेक्ट किए बिना लोकेशन बार में पूरे यूआरएल को वास्तव में नहीं बदल सकते हैं (सुरक्षा मुद्दों के बारे में सोचें!)।

हालांकि आप hash भाग ( # बाद क्या) बदल सकते हैं और इसे पढ़ सकते हैं: location.hash

ps। किसी लिंक द्वारा डिफॉल्ट onclick रीडायरेक्ट को इस तरह से रोकें:

$("#link").bind("click",function(e){
  doRedirectFunction();
  e.preventDefault();
})

नोट: history.pushState() अब समर्थित है - अन्य उत्तरों देखें।

आप रीडायरेक्ट किए बिना पूरे यूआरएल को बदल नहीं सकते हैं, इसके बजाय आप क्या कर सकते हैं हैश बदलना है।

हैश # यूआरएल के बाद यूआरएल का हिस्सा है। शुरुआत में यह आपके एचटीएमएल दस्तावेज़ के अनुभागों को (स्थानीय रूप से) निर्देशित करने का इरादा था, लेकिन आप जावास्क्रिप्ट के माध्यम से इसे वैश्विक चर की तरह कुछ हद तक उपयोग करने के लिए इसे पढ़ और संशोधित कर सकते हैं।

यदि अच्छी तरह से लागू किया गया है, तो यह तकनीक दो तरीकों से उपयोगी है:

  1. ब्राउज़र इतिहास आपके द्वारा उठाए गए प्रत्येक अलग-अलग चरण को याद रखेगा (चूंकि यूआरएल + हैश बदल गया है)
  2. आपके पास एक पता हो सकता है जो न केवल किसी विशेष HTML दस्तावेज़ से लिंक हो, बल्कि आपके जावास्क्रिप्ट को क्या करना है इसके बारे में एक सुराग देता है। इसका मतलब है कि आप अपने वेब ऐप के अंदर एक राज्य को इंगित करते हैं।

हैश को बदलने के लिए आप कर सकते हैं:

document.location.hash = "show_picture";

हैश परिवर्तनों को देखने के लिए आपको कुछ ऐसा करना है:

window.onhashchange = function(){
    var what_to_do = document.location.hash;    
    if (what_to_do=="#show_picture")
        show_picture();
}

बेशक हैश सिर्फ एक स्ट्रिंग है, इसलिए आप इसे जितना चाहें उतना कर सकते हैं। उदाहरण के लिए यदि आप इसे स्ट्रिंग करने के लिए JSON का उपयोग करते हैं तो आप वहां एक संपूर्ण ऑब्जेक्ट डाल सकते हैं।

इसके साथ उन्नत चीजों को करने के लिए बहुत अच्छे JQuery पुस्तकालय हैं।


यह URL पुनर्लेखन के माध्यम से प्राप्त किया जाता है, यूआरएल obfuscating के माध्यम से नहीं, जो नहीं किया जा सकता है।

ऐसा करने का एक और तरीका, जैसा कि उल्लेख किया गया है, हैशटैग को बदलकर है

window.location.hash = "/2131/"

वह साइट यूआरएल के "खंड" भाग का उपयोग करती है: "#" के बाद सामान। यह GET अनुरोध के हिस्से के रूप में ब्राउज़र द्वारा सर्वर पर नहीं भेजा जाता है, लेकिन इसका उपयोग पृष्ठ स्थिति को संग्रहीत करने के लिए किया जा सकता है। तो हाँ आप पेज रीफ्रेश या रीलोड किए बिना खंड को बदल सकते हैं। जब पृष्ठ लोड होता है, तो आपका जावास्क्रिप्ट इस खंड को पढ़ता है और पेज सामग्री को उचित रूप से अपडेट करता है, सर्वर से डेटा को AJAX अनुरोधों के माध्यम से आवश्यकतानुसार प्राप्त करता है। जेएस में खंड पढ़ने के लिए:

var fragment = location.hash;

लेकिन ध्यान दें कि इस मान में शुरुआत में "#" वर्ण शामिल होगा। टुकड़ा सेट करने के लिए:

location.hash = "your_state_data";




location