2010-07-19 13 views
30

मुझे अपने फॉर्म पर एक ड्रॉपडाउन मेनू मिला है, जब कुछ चुना जाता है तो मुझे वर्तमान पृष्ठ को फिर से लोड करने की आवश्यकता होती है, लेकिन एक संलग्न क्वेरीस्ट्रिंग के साथ।jQuery/जावास्क्रिप्ट - एक संलग्न क्वेरीस्ट्रिंग के साथ वर्तमान पृष्ठ पुनः लोड करें?

मैं यह करने के बारे में कैसे जाउंगा?

+0

अब तक आप क्या प्राप्त कर चुके हैं? कोई कोड? – Reigel

उत्तर

12
var params = [ 
    "foo=bar", 
    "base=ball" 
]; 

window.location.href = 
    "http://" + 
    window.location.host + 
    window.location.pathname + 
    '?' + params.join('&'); 

आपके change ईवेंट हैंडलर के भीतर यह कोड चाल करेगा।

उदाहरण के लिए:

$('#my_dropdown_id').bind('change', function(){ 
    var params = [ 
     "foo=bar", 
     "base=" + $(this).val() 
    ]; 

    window.location.href = "http://" + window.location.host + window.location.pathname + '?' + params.join('&'); 
}); 
+0

यदि आप जल्दी में हैं और संभवतः खुद को दोहराते हुए ध्यान नहीं देते हैं, तो 'window.location.href + = "और foo = bar और base = ball" 'चुटकी में कर सकते हैं। – rymo

+0

नीचे दिए गए उत्तर पर ध्यान दें (http://stackoverflow.com/a/16553500/190599) सीधे http निर्दिष्ट नहीं करने के बारे में। – CodeReaper

29

यह एक पुरानी सवाल यह है, लेकिन यह गूगल खोज परिणामों में पहले आया।

जिस समाधान के साथ मैं गया था वह जेंडी के समान है।

window.location.pathname मुझे क्वेरी स्ट्रिंग के बिना पृष्ठ का यूआरएल देता है। मैं फिर क्वेरी स्ट्रिंग को "?"+$.param({'foo':'bar','base':'ball'}) के साथ बनाने में सक्षम हूं जिसे मैं पथनाम में जोड़ता हूं और window.location.href पर सेट करता हूं।

window.location.href = window.location.pathname+"?"+$.param({'foo':'bar','base':'ball'}) 
+2

हाय jgreen, ढेर ओवरफ्लो में आपका स्वागत है। एक और जवाब के रूप में अपना समाधान साझा करने के लिए धन्यवाद। पुराने प्रश्न का विस्तृत उत्तर प्रदान करने से निश्चित रूप से भविष्य के आगंतुकों की भी मदद मिलेगी। +1 – jmort253

11

आप शीर्ष दर्जा दिया जवाब के साथ जाना है, तो आप

window.location.protocol 

साथ कोड में

http:// 

को बदलने के लिए चाहते हो सकता है इतना है कि यह अन्य प्रोटोकॉल के लिए काम करता है, https या की तरह फ़ाइल। तो

window.location.href = window.location.protocol + "//" + window.location.host + window.location.pathname + '?' + params.join('&'); 
+0

आप इसे शीर्ष रेटेड उत्तर – zimmryan

+0

के तहत टिप्पणी करने के लिए ले जाना चाहते हैं टिप्पणी जोड़ने के लिए खोने की प्रतिष्ठा मुझे विश्वास है – broetchen

0

अगर आपके पास मौजूदा क्वेरी स्ट्रिंग है कि आप तो इस संस्करण है कि करता है और किसी भी मौजूदा अपनी नई पैरामीटर कहते हैं रखना चाहते हैं। चाबियाँ को लोअरकेस में परिवर्तित कर दिया जाता है ताकि डुप्लिकेट जोड़े नहीं जा सकें। Quersytring को बनाए रखने से समाधान अधिक जटिल हो जाता है, इसलिए यदि आपको आवश्यकता हो तो मैं केवल यही करूँगा।

$("#sortby").change(function() { 

    var queryString = getQueryStrings(); 
    // Add new params to the querystring dictionary 
    queryString["sortby"] = $("#sortby").val(); 

    window.location.href = 
     window.location.protocol + "//" + 
     window.location.host + 
     window.location.pathname + 
     createQueryString(queryString); 
}); 


// http://stackoverflow.com/questions/2907482 
// Gets Querystring from window.location and converts all keys to lowercase 
function getQueryStrings() { 
    var assoc = {}; 
    var decode = function (s) { return decodeURIComponent(s.replace(/\+/g, " ")); }; 
    var queryString = location.search.substring(1); 
    var keyValues = queryString.split('&'); 

    for (var i in keyValues) { 
     var key = keyValues[i].split('='); 
     if (key.length > 1) { 
      assoc[decode(key[0]).toLowerCase()] = decode(key[1]); 
     } 
    } 

    return assoc; 
} 

function createQueryString(queryDict) { 
    var queryStringBits = []; 
    for (var key in queryDict) { 
     if (queryDict.hasOwnProperty(key)) { 
      queryStringBits.push(key + "=" + queryDict[key]); 
     } 
    } 
    return queryStringBits.length > 0 
     ? "?" + queryStringBits.join("&") 
     : ""; 
} 
3

आप क्वेरी स्ट्रिंग को संरक्षित करने और संभवतः इसे करने के लिए संलग्न, window.location.search का उपयोग एक बहुत आसान तरीका चाहते हैं; यहाँ एक टुकड़ा है:

var search = window.location.search + (window.location.search ? "&" : "?"); 
       search += "param1=foo&param2=bar"; 
       window.location.href = window.location.protocol + "//" + window.location.host + window.location.pathname + search; 

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

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