2012-05-02 7 views
8

को महत्व देता है अगर मैं एक लिंक है कि समारोह history.pushState({}, "", link); जहाँ मेरे link उदाहरण page.php?value=1&value2=2 के लिए है के साथ बदल किया जा रहा है वहाँ एक रास्ता अभी value2pushState() साथ समारोह को बदलने के लिए के बजाय पूरे लिंक बदल रहा है?history.pushState() परिवर्तन क्वेरी

उत्तर

5

है कि आप क्या करने की कोशिश कर रहे हैं के लिए एक अतिरिक्त प्रविष्टि जोड़े बिना URL बदल जाती है इतिहास वस्तु, आप replaceState आज़मा सकते हैं।

history.replaceState({value: 1, value2: X}, "title", "page.php"); 
+9

यह एक उत्तर की तरह प्रतीत नहीं होता है। किसी ऑब्जेक्ट को 'replaceState'' के पहले तर्क के रूप में पास करना URL में क्वेरी मानों को प्रभावित नहीं करेगा। केवल अंतिम तर्क होगा: इस उदाहरण में, यह पूरी तरह से क्वेरी को हटा देगा। –

+1

ओपी वर्तमान इतिहास स्थिति में एक मूल्य अपडेट करना चाहता था (एक नया बनाने के बजाय)। जबकि आप किसी ऑब्जेक्ट ऑब्जेक्ट को संशोधित करने के लिए पुशस्टेट का उपयोग नहीं कर सकते हैं, यह प्रतिस्थापन का उद्देश्य है। – devstruck

2

नहीं, क्योंकि क्वेरी स्ट्रिंग यूआरएल का हिस्सा है। यदि आपको सर्वर के उद्देश्यों के लिए वास्तव में उन मानों को पारित करने की आवश्यकता नहीं है, तो आप उन्हें इतिहास के राज्य ऑब्जेक्ट में शामिल कर सकते हैं, और फिर आप pushState() के साथ केवल राज्य वस्तु को बदल सकते हैं। उदाहरण के लिए:

history.pushState({value: 1, value2: 2}, "Title", 'page.php'); 
history.pushState({value: 1, value2: 'new value'}, "Title"); 
3

आप एक क्वेरी स्ट्रिंग पैरामीटर मान बदलने के लिए यह उपयोगी समारोह का उपयोग कर सकते हैं:

function updateParam(url, param, value) 
{ 
    var re = new RegExp(param+"(.+?)(&|$)","g"); 

    return url.replace(re, param+'='+value) 
} 
+3

'यही कारण है कि अंतिम पंक्ति होना चाहिए url.replace (फिर से, परम + '=' + मूल्य + '$ 2')', है ना? अन्यथा आप एम्पर्सेंड डिलीमीटर खो देते हैं। – Ricky

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