url और ताज़ा पृष्ठ पर जाएँ


134

मैं जावास्क्रिप्ट का एक टुकड़ा लिखना चाह रहा हूं जो वर्तमान url में एक पैरामीटर को जोड़ देगा और फिर पृष्ठ को रीफ्रेश करेगा - मैं यह कैसे कर सकता हूं?


सबसे अधिक अनुकूलित समाधान मैंने पाया है: stackoverflow.com/a/38792165/1783439
nu everest

जवाबों:


162

यह काम करना चाहिए (परीक्षण नहीं!)

var url = window.location.href;    
if (url.indexOf('?') > -1){
   url += '&param=1'
}else{
   url += '?param=1'
}
window.location.href = url;

1
str.search (regex) srt.indexOf (str2) की तुलना में तेज़ है
xavierm02

1
और आपको एक चर नाम और एक पैरामीटर्स पैरामीटर के साथ एन्कोडर्कोम्पोनेंट () के साथ एक उदाहरण देना चाहिए।
xavierm02

और> -1 के लिए, आपको उपयोग करना चाहिए! == -1
xavierm02

8
एक इस का पालन करें, कुछ तर्क कैसे जोड़ सकते हैं कि अगर पहले से ही एक यूआरएल में मौजूद पैरामीटर मैं एक नया पैरामीटर जोड़ने के बजाय इसके मूल्य को अपडेट करता हूं?
शौकिया

1
यह url से लंगर (हैश वैल्यू) को ले जाएगा, यदि यह अस्तित्व में है, तो @amateur आप एक ऐसा फ़ंक्शन पा सकते हैं जो यहां करता है: stackoverflow.com/questions/486896/…
डग मोलिनक्स

143

स्वीकार किए गए उत्तर की तुलना में कम है, वही कर रहे हैं, लेकिन इसे सरल रखते हुए:

window.location.search += '&param=42';

हमें पूरे URL को बदलने की ज़रूरत नहीं है, बस क्वेरी स्ट्रिंग, जिसे स्थान की खोज विशेषता के रूप में जाना जाता है।

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


11
ऐसे मामले के लिए जहां आप जानते हैं कि यह एकमात्र पैरामीटर होगा, आप इसे जोड़ने के बजाय खोज भी सेट कर सकते हैं:window.location.search = '?param=42';
डेव ड्यूप्लंटिस

1
अच्छा काम!! सही, सरल और अनुकूलित तरीका; स्वीकृत उत्तर होना चाहिए था।
रोहित

यदि आपका url है: www.mysite.com ... तो क्या यह url नहीं बनाएगा: www.mysite.com & param = 42 जिसे "की आवश्यकता होगी?" url में इसका एकमात्र पैरामीटर चरित्र है। मुझे @ श्लोमी कोमेई का जवाब पसंद है क्योंकि यह उन 2 मुख्य परिदृश्यों को शामिल करता है।
18

1
@graitKing ब्राउज़र स्थान के खोज विशेषता में पैरामीटर जोड़ते समय प्रश्न चिह्न जोड़ता है। इसे अपने ब्राउज़र कंसोल में आज़माएं।
बो फ्रेडरिकसन

1
मेरे खराब @BoFrederiksen आप वास्तव में सही हैं ... इस बारे में बात करें। मोटे का "+ =" ... वह चूक गया। मुझ से +1।
greaterKing

70

यहां अधिकांश उत्तर यह सुझाव देते हैं कि किसी व्यक्ति को URL पर पैरामीटर (एस) को जोड़ना चाहिए, निम्नलिखित स्निपेट या इसी तरह की भिन्नता:

location.href = location.href + "&parameter=" + value;

यह अधिकांश मामलों के लिए काफी अच्छा काम करेगा।

तथापि

मेरी राय में एक URL पर एक पैरामीटर को जोड़ने का यह सही तरीका नहीं है।

क्योंकि सुझाए गए दृष्टिकोण का परीक्षण नहीं होता है यदि पैरामीटर पहले से ही URL में सेट है, यदि सावधान नहीं है तो एक ही लंबे URL के साथ एक ही पैरामीटर के साथ कई बार दोहराया जा सकता है। अर्थात:

https://stackoverflow.com/?&param=1&param=1&param=1&param=1&param=1&param=1&param=1&param=1&param=1

इस बिंदु पर जहां समस्याएं शुरू होती हैं। सुझाए गए दृष्टिकोण और एकाधिक पृष्ठ ताज़ा होने के बाद एक बहुत लंबा URL बना सकते हैं, इस प्रकार URL को अमान्य बना सकते हैं। लंबे URL के बारे में अधिक जानकारी के लिए इस लिंक का अनुसरण करें विभिन्न ब्राउज़रों में URL की अधिकतम लंबाई क्या है?

यह मेरा सुझाया दृष्टिकोण है:

function URL_add_parameter(url, param, value){
    var hash       = {};
    var parser     = document.createElement('a');

    parser.href    = url;

    var parameters = parser.search.split(/\?|&/);

    for(var i=0; i < parameters.length; i++) {
        if(!parameters[i])
            continue;

        var ary      = parameters[i].split('=');
        hash[ary[0]] = ary[1];
    }

    hash[param] = value;

    var list = [];  
    Object.keys(hash).forEach(function (key) {
        list.push(key + '=' + hash[key]);
    });

    parser.search = '?' + list.join('&');
    return parser.href;
}

इस फ़ंक्शन के साथ बस निम्नलिखित कार्य करना होगा:

location.href = URL_add_parameter(location.href, 'param', 'value');

1
सिर्फ उपयोग करने के लिए क्यों नहीं:if(window.location.search.indexOf('&param=') == -1) {window.location.search += '&param=1';}
538ROMEO 21

@ SébastienGarcia-Roméo हाँ यह एक दिलचस्प दृष्टिकोण है, और वास्तव में वैध है, हालांकि, इस तरह से कार्य करने के दो कारण हैं। 1. मौजूदा डुप्लिकेट मापदंडों को खत्म करने के लिए। 2. एक मौजूदा पैरामीटर के मूल्य को अधिलेखित करने के लिए। इस दृष्टिकोण से, अब indexOfकोड के लिए अनावश्यक जटिलता का परिचय हो सकता है।
येओ


2
function gotoItem( item ){
    var url = window.location.href;
    var separator = (url.indexOf('?') > -1) ? "&" : "?";
    var qs = "item=" + encodeURIComponent(item);
    window.location.href = url + separator + qs;
}

अधिक हमवतन संस्करण

function gotoItem( item ){
    var url = window.location.href;    
    url += (url.indexOf('?') > -1)?"&":"?" + "item=" + encodeURIComponent(item);
    window.location.href = url;
}

1

कृपया नीचे दिए गए कोड की जाँच करें:

/*Get current URL*/    
var _url = location.href; 
/*Check if the url already contains ?, if yes append the parameter, else add the parameter*/
_url = ( _url.indexOf('?') !== -1 ) ? _url+'&param='+value : _url+'?param='+value;
/*reload the page */
window.location.href = _url;

1

ऊपर @ yeyo के विचारशील उत्तर के लिए एक छोटा बग फिक्स।

परिवर्तन:

var parameters = parser.search.split(/\?|&/);

सेवा:

var parameters = parser.search.split(/\?|&amp;/);


कृपया टिप्पणी में इस तरह के सुधार पोस्ट करें या प्रस्ताव करें और संपादित करें। वे एक अलग जवाब नहीं देते।
ट्रांसजेंसी के लिए जे जे और


0

इसके अलावा:

window.location.href += (window.location.href.indexOf('?') > -1 ? '&' : '?') + 'param=1'

शाओमी का सिर्फ एक लाइनर बुकमार्कलेट में उपयोग करने योग्य है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.