बच गए URL पैरामीटर


302

मैं एक jQuery प्लगइन की तलाश कर रहा हूं जो URL पैरामीटर प्राप्त कर सकता है, और जावास्क्रिप्ट त्रुटि को उत्पन्न किए बिना इस खोज स्ट्रिंग का समर्थन करता है: "विकृत यूआरआई"। यदि कोई jQuery प्लगइन नहीं है जो इसका समर्थन करता है, तो मुझे यह जानने की आवश्यकता है कि इसे समर्थन करने के लिए इसे कैसे संशोधित किया जाए।

?search=%E6%F8%E5

URL पैरामीटर का मान, जब डीकोड हो, तो होना चाहिए:

æøå

(अक्षर नॉर्वेजियन हैं)।

मेरे पास सर्वर तक पहुंच नहीं है, इसलिए मैं इस पर कुछ भी संशोधित नहीं कर सकता।



1
कारण यह है कि आपको "विकृत URI अनुक्रम" मिल रहा है, क्योंकि अधिकांश फ़ंक्शन उपयोग करते हैं decodeURIComponent()। नॉर्वेजियाई पात्रों को सबसे अधिक संभावना थी कि कुछ का उपयोग करके इनकोड किया जाए escape()और decodeURIComponent()कॉल को बदलकर unescape()मदद की जाए।
केविन एम

एक आधुनिक समाधान के लिए मेरा उत्तर देखें: stackoverflow.com/a/19992436/64949
सिंध्रे सोरहूस

जवाबों:


417
function getURLParameter(name) {
    return decodeURI(
        (RegExp(name + '=' + '(.+?)(&|$)').exec(location.search)||[,null])[1]
    );
}

33
इसके साथ name = 'bar', मुझे लगता है कि यह रीजैक्सप मैच होगा 'foobar=10'और वापसी करेगा '10'। शायद आप '[?|&]'अपने regexp की शुरुआत में जोड़ सकते हैं । चीयर्स!
सेबास्टियन रोकेसेरा

34
यह फ़ंक्शन अशक्त के बजाय 'शून्य' देता है जब पैरामीटर को परिभाषित नहीं किया जाता है ... js का आनंद ...
डेमियन

12
आप "decodeURIComponent ()" के बजाय "decodeURI ()" चाहते हो सकता है, खासकर यदि आप एक URL पैरामीटर के रूप में रिटर्न यूआरएल जैसे दिलचस्प डेटा पास कर रहे हैं
पूर्णतावादी

25
यह अच्छा है, लेकिन decodeURIComponent बेहतर है, उदाहरण के लिए मेरे पास मेरे हैशटैग में हैशटैग (23%) है जिसे डिकोडर्इ द्वारा अनदेखा किया जाएगा। और मैं अशक्त नहीं लौटेगा, लेकिन "", क्योंकि डिकोड्यूर (अशक्त) === "अशक्त", जो एक अजीब वापसी मूल्य है, "" बेहतर है; अगर (geturLParameter ("param") === "null" के बजाय आप (geturLParameter ("param")) कर सकते हैं। तो, मेरा उन्नत संस्करण: decodeURIComponent ((RegExp (नाम + '=' + '(+?)? ((& $ $)')। Exec (location.search) || [, ""]] [1]
स्टैंडअप 75

3
यदि इस परिणाम के पाए जाने या न होने के बावजूद डाउन रिटर्न दिया जाता है, और कोई फर्क नहीं पड़ता कि आपने वैकल्पिक सरणी के रूप में क्या रखा है, उदाहरण के लिए [, null], क्योंकि thre परिणाम decodeURI के भीतर लिपटे थे, जो कुछ भी स्ट्रिंग में बदल गया, संजीव सही था लेकिन उसका कोड सही तरीके से परीक्षण नहीं किया गया और साधारण कॉपी और पेस्ट काम नहीं करता है। function getURLParameter(name) { var p = RegExp(name + '=' + '(.+?)(&|$)').exec(location.search); if(!!p) { p = decodeURI(p[1]); } return p; }
लुकाज़ 'सेवेरियन' ग्रीला

295

नीचे मैंने यहां टिप्पणियों से बनाया है, साथ ही बग्स को ठीक करने का उल्लेख नहीं किया गया है (जैसे कि वास्तव में अशक्त लौटना, और 'शून्य' नहीं):

function getURLParameter(name) {
    return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)').exec(location.search)||[,""])[1].replace(/\+/g, '%20'))||null;
}

6
newRegExp के सामने जोड़ने के बारे में कैसे ? कम लिट चेतावनी।
ripper234

18
यह स्वीकृत उत्तर होना चाहिए। "अशक्त" के बजाय वास्तविक अशक्त वापस प्राप्त करना बेहतर है।
कला

11
अगर किसी को इसे कॉफ़ीस्क्रिप्ट में परिवर्तित करने की आवश्यकता है: getURLParameter: (नाम) -> decodeURIComponent ((नया RegExp ("[? | और] # {name} = ([^?]? +)! (& # ##) $) ")। निष्पादन (स्थान। खोज) || [अशक्त," "]] [1] .replace (/ \ + / g, '% 20')) || अशक्त?
Redbeard

1
@Redbeard - क्या आपके फ़ंक्शन में दोहरे कॉलन के बजाय विधि परिभाषा के बाद '=' चिन्ह नहीं होना चाहिए?
Zippie

1
यह एक गेट-यूआरएल-पैरामीटर फ़ंक्शन का एकमात्र संस्करण है जो मेरे लिए UTF8 स्ट्रिंग के साथ काम करता है।
निश्चित रूप

107

क्या आप वास्तव में चाहते हैं jQuery URL पार्सर प्लगइन है । इस प्लगइन के साथ, एक विशिष्ट URL पैरामीटर (वर्तमान URL के लिए) का मूल्य प्राप्त करना इस तरह दिखता है:

$.url().param('foo');

यदि आप मान के रूप में पैरामीटर नाम और मान के रूप में पैरामीटर नाम के साथ एक ऑब्जेक्ट चाहते हैं, तो आप param()बिना किसी तर्क के कॉल करेंगे , जैसे:

$.url().param();

यह पुस्तकालय अन्य उरोजों के साथ भी काम करता है, न कि केवल एक वर्तमान में:

$.url('http://allmarkedup.com?sky=blue&grass=green').param();
$('#myElement').url().param(); // works with elements that have 'src', 'href' or 'action' attributes

चूँकि यह एक संपूर्ण URL पार्सिंग लाइब्रेरी है, आप URL से अन्य जानकारी भी प्राप्त कर सकते हैं, जैसे पोर्ट निर्दिष्ट, या पथ, प्रोटोकॉल आदि:

var url = $.url('http://allmarkedup.com/folder/dir/index.html?item=value');
url.attr('protocol'); // returns 'http'
url.attr('path'); // returns '/folder/dir/index.html'

इसकी अन्य विशेषताएं भी हैं, अधिक डॉक्स और उदाहरणों के लिए इसका होमपेज देखें

इसके बजाय इस विशेष उद्देश्य के लिए अपने स्वयं के यूआरआई पार्सर लिखने के थोड़े में काम करता है सबसे मामलों, एक वास्तविक यूआरआई पार्सर का उपयोग करें। उत्तर के आधार पर, अन्य उत्तरों से कोड बदले के 'null'बजाय वापस आ सकता है null, खाली मापदंडों ( ?foo=&bar=x) के साथ काम नहीं करता है , एक ही बार में सभी मापदंडों को पार्स और वापस नहीं कर सकता है, यदि आप मापदंडों के लिए URL को बार-बार क्वेरी करते हैं तो काम दोहराता है आदि।

एक वास्तविक URI पार्सर का उपयोग करें, अपना खुद का आविष्कार न करें।

JQuery के उन लोगों के लिए, शुद्ध जेएस प्लगइन का एक संस्करण है


23
प्रश्न "jQuery के साथ URL पैरामीटर प्राप्त करें" है। मेरा जवाब सवाल का जवाब देता है। अन्य उत्तर उपयोगकर्ता को इस विशिष्ट उपयोग के मामले के लिए मूल रूप से अपना खुद का यूआरआई पार्सर लिखने का निर्देश देते हैं, जो एक भयानक विचार है। URI का पार्सिंग अधिक जटिल है जो लोग सोचते हैं।
लुकास

2
यह वह उत्तर है जिसकी मैं तलाश कर रहा था, और कुछ अन्य उत्तरों के विपरीत बहुत jQuery-ish है।
एहतेश चौधरी

क्या प्लगइन URI एन्कोडिंग को संभालता है या क्या मुझे इसे मैन्युअल रूप से डीकोड करना है?
रॉबर्टो लिनारेस

सवाल कहता है "जावास्क्रिप्ट" (मुझे लगता है कि इसका मतलब है कि सीधे डोम का मतलब है) या jQuery। तो दूसरों में से कोई भी करेगा।
ब्रूनोइस

43

यदि आपको नहीं पता है कि URL पैरामीटर क्या होंगे और उन मापदंडों और मानों के साथ एक ऑब्जेक्ट प्राप्त करना चाहते हैं जो पैरामीटर में हैं, तो आप इनका उपयोग कर सकते हैं:

function getParameters() {
  var searchString = window.location.search.substring(1),
      params = searchString.split("&"),
      hash = {};

  if (searchString == "") return {};
  for (var i = 0; i < params.length; i++) {
    var val = params[i].split("=");
    hash[unescape(val[0])] = unescape(val[1]);
  }
  return hash;
}

GetParameters () को url के साथ कॉल /posts?date=9/10/11&author=nilbusकरना जैसे वापस आएगा:

{
  date:   '9/10/11',
  author: 'nilbus'
}

मैं इस कोड को यहाँ शामिल नहीं करूंगा क्योंकि यह प्रश्न से बहुत दूर है, लेकिन weareon.net ने एक पुस्तकालय पोस्ट किया है जो URL में मापदंडों के हेरफेर की भी अनुमति देता है:


1
हां, यह बेहतर है कि आप सभी परेम प्राप्त करें। यहां सूचीबद्ध अन्य सभी समाधान प्रत्येक परम के लिए रेगेक्स को दोहराते हैं।
बर्नार्ड

यह फ़ंक्शन एक अजीब वस्तु देता है: {"": undefined}जब URL मापदंडों से शून्य होता है। असाइनमेंट के if(searchString=='') return {};बाद सीधे उपयोग करके किसी खाली वस्तु को वापस करने के लिए सबसे अच्छा है searchString
जॉर्डन आर्सेनो

40

आप ब्राउज़र का उपयोग कर सकते हैं मूल स्थान। खोज संपत्ति:

function getParameter(paramName) {
  var searchString = window.location.search.substring(1),
      i, val, params = searchString.split("&");

  for (i=0;i<params.length;i++) {
    val = params[i].split("=");
    if (val[0] == paramName) {
      return unescape(val[1]);
    }
  }
  return null;
}

लेकिन कुछ jQuery प्लगइन्स हैं जो आपकी मदद कर सकते हैं:


4
यह उन सभी रेगेक्स वन-लाइनर्स की तुलना में बहुत क्लीनर और अधिक पठनीय (और शायद अधिक बग-मुक्त) है।
टिम्मम

8
मैं unescape () के बजाय decodeURIComponent () का उपयोग करने का सुझाव दूंगा
freedev

+1 यह आधुनिक ब्राउज़रों के लिए काम करता है लेकिन कुछ देवों को इसके साथ काम करने की आवश्यकता है ...: | IE8: एस।
ब्रूनोइस

25

999 के उत्तर के आधार पर :

function getURLParameter(name) {
    return decodeURIComponent(
        (location.search.match(RegExp("[?|&]"+name+'=(.+?)(&|$)'))||[,null])[1]
    );  
}

परिवर्तन:

  • decodeURI() के साथ बदल दिया गया है decodeURIComponent()
  • [?|&] regexp की शुरुआत में जोड़ा जाता है

3
दूसरों के लिए मददगार हो सकते हैं यदि आप बता सकते हैं कि आपने ये बदलाव क्यों किए। Thx
टिम

3
खाली परासों को नहीं संभालता ?a=&b=1:। बेहतर रीजेक्सप होगा:"[?&]"+name+"=([^&]*)"
सर्ग

6

इसे असंवेदनशील बनाने के लिए i पैरामीटर जोड़ने की आवश्यकता है:

  function getURLParameter(name) {
    return decodeURIComponent(
      (RegExp(name + '=' + '(.+?)(&|$)', 'i').exec(location.search) || [, ""])[1]
    );
  }

3

सभी उत्तरों को पढ़ने के बाद मैंने झंडे के रूप में मापदंडों का उपयोग करने के लिए + एक दूसरे फ़ंक्शन के साथ इस संस्करण को समाप्त किया

function getURLParameter(name) {
    return decodeURIComponent((new RegExp('[?|&]' + name + '=' + '([^&;]+?)(&|#|;|$)','i').exec(location.search)||[,""])[1].replace(/\+/g, '%20'))||null;
}

function isSetURLParameter(name) {
    return (new RegExp('[?|&]' + name + '(?:[=|&|#|;|]|$)','i').exec(location.search) !== null)
}

2
अच्छा जवाब, हालांकि सिर्फ एक चेतावनी। प्रति JSHint, [, ""] पुराने ब्राउज़रों के लिए समस्याएँ पैदा कर सकता है। इसलिए, इसके बजाय [अशक्त, ""] या [अपरिभाषित, ""] का उपयोग करें। अभी भी हम में से कुछ दुखी हैं जो IE8 का समर्थन करते हैं और मैं इसे IE7 कहने की हिम्मत करता हूं।
डेलिसिया ब्रमिट

2
$.urlParam = function(name){
  var results = new RegExp('[\\?&]' + name + '=([^&#]*)').exec(top.window.location.href); 
  return (results !== null) ? results[1] : 0;
}

$.urlParam("key");

2

उदाहरण के लिए, एक फ़ंक्शन जो किसी भी पैरामीटर चर का मान लौटाता है।

function GetURLParameter(sParam)
{
    var sPageURL = window.location.search.substring(1);
    var sURLVariables = sPageURL.split('&');
    for (var i = 0; i < sURLVariables.length; i++)
    {
        var sParameterName = sURLVariables[i].split('=');
        if (sParameterName[0] == sParam)
        {
            return sParameterName[1];
        }
    }
}​

और यह है कि आप URL मानकर इस फ़ंक्शन का उपयोग कैसे कर सकते हैं,

"Http://example.com/?technology=jquery&blog=jquerybyexample"।

var tech = GetURLParameter('technology');
var blog = GetURLParameter('blog');

तो उपरोक्त कोड चर "टेक" में मूल्य के रूप में "jQuery" होगा और "ब्लॉग" चर "jquerybyexample" होगा।


2

आपको इस तरह से कुछ के लिए jQuery का उपयोग नहीं करना चाहिए!
आधुनिक तरीका यह है कि Bower जैसे पैकेज-मैनेजर के माध्यम से छोटे पुन: प्रयोज्य मॉड्यूल का उपयोग किया जाए।

मैंने एक छोटा मॉड्यूल बनाया है जो क्वेरी स्ट्रिंग को ऑब्जेक्ट में पार्स कर सकता है। इसे इस तरह उपयोग करें:

// parse the query string into an object and get the property
queryString.parse(unescape(location.search)).search;
//=> æøå

यदि आप कह रहे हैं कि फ्रेमवर्क होना आधुनिक नहीं है, तो यह ठीक है। लेकिन मेरी राय में फ्रेमवर्क वास्तव में अपनी जगह है। हालांकि jQuery मुझे कम और कम सुंदर लग रहा है।
Lodewijk

0

यहां बहुत सारे छोटी गाड़ी कोड हैं और रेगेक्स समाधान बहुत धीमे हैं। मुझे एक समाधान मिला जो रेगेक्स समकक्ष की तुलना में 20 गुना अधिक तेजी से काम करता है और यह सामान्य रूप से सरल है:

    /*
    *   @param      string      parameter to return the value of.
    *   @return     string      value of chosen parameter, if found.
    */
    function get_param(return_this)
    {
        return_this = return_this.replace(/\?/ig, "").replace(/=/ig, ""); // Globally replace illegal chars.

        var url = window.location.href;                                   // Get the URL.
        var parameters = url.substring(url.indexOf("?") + 1).split("&");  // Split by "param=value".
        var params = [];                                                  // Array to store individual values.

        for(var i = 0; i < parameters.length; i++)
            if(parameters[i].search(return_this + "=") != -1)
                return parameters[i].substring(parameters[i].indexOf("=") + 1).split("+");

        return "Parameter not found";
    }

console.log(get_param("parameterName"));

रेगेक्स सब-एंड-एंड-सॉल्यूशन नहीं है, इस प्रकार की समस्या के लिए सरल स्ट्रिंग हेरफेर एक बड़ी मात्रा में अधिक कुशलता से काम कर सकता है। कोड स्रोत


0
<script type="text/javascript">
function getURLParameter(name) {
        return decodeURIComponent(
            (location.search.toLowerCase().match(RegExp("[?|&]" + name + '=(.+?)(&|$)')) || [, null])[1]
        );
    }

</script>

getURLParameter(id)या getURLParameter(Id)एक ही काम करता है:)


0

jQuery कोड स्निपेट डायनामिक चर को मापदंडों के रूप में संग्रहीत करने के लिए और उन्हें अपने वेब संस्करण के लिए उपयोग करने के लिए तैयार जावास्क्रिप्ट चर के रूप में संग्रहीत करता है।

$.urlParam = function(name){
    var results = new RegExp('[\?&]' + name + '=([^&#]*)').exec(window.location.href);
    if (results==null){
       return null;
    }
    else{
       return results[1] || 0;
    }
}

example.com?param1=name&param2=&id=6

$.urlParam('param1'); // name
$.urlParam('id');        // 6
$.urlParam('param2');   // null

//example params with spaces
http://www.jquery4u.com?city=Gold Coast
console.log($.urlParam('city'));  
//output: Gold%20Coast

console.log(decodeURIComponent($.urlParam('city'))); 
//output: Gold Coast

-1
function getURLParameters(paramName) 
{
        var sURL = window.document.URL.toString();  
    if (sURL.indexOf("?") > 0)
    {
       var arrParams = sURL.split("?");         
       var arrURLParams = arrParams[1].split("&");      
       var arrParamNames = new Array(arrURLParams.length);
       var arrParamValues = new Array(arrURLParams.length);     
       var i = 0;
       for (i=0;i<arrURLParams.length;i++)
       {
        var sParam =  arrURLParams[i].split("=");
        arrParamNames[i] = sParam[0];
        if (sParam[1] != "")
            arrParamValues[i] = unescape(sParam[1]);
        else
            arrParamValues[i] = "No Value";
       }

       for (i=0;i<arrURLParams.length;i++)
       {
                if(arrParamNames[i] == paramName){
            //alert("Param:"+arrParamValues[i]);
                return arrParamValues[i];
             }
       }
       return "No Parameters Found";
    }

}

-1

मैंने इस तरह से एक URL से जावास्क्रिप्ट में URL पैरामीटर प्राप्त करने के लिए एक साधारण फ़ंक्शन बनाया:

.....58e/web/viewer.html?page=*17*&getinfo=33


function buildLinkb(param) {
    var val = document.URL;
    var url = val.substr(val.indexOf(param))  
    var n=parseInt(url.replace(param+"=",""));
    alert(n+1); 
}
buildLinkb("page");

उत्पादन: 18


2
कई प्रश्नों के बायलरप्लेट / वर्बेटिम उत्तर कॉपी और पेस्ट करते समय सावधान रहें, ये समुदाय द्वारा "स्पैमी" के रूप में चिह्नित किए जाते हैं। यदि आप ऐसा कर रहे हैं, तो इसका आमतौर पर मतलब है कि प्रश्न डुप्लिकेट हैं इसलिए उन्हें इस तरह से ध्वजांकित करें: stackoverflow.com/a/11808489/419
केव

-1

बस अगर आप लोग लोकलहोस्ट / index.xsp की तरह url लेते हैं? = A = 1 # कुछ और आपको परम को हैश न होने की जरूरत है।

var vars = [], hash, anchor;
var q = document.URL.split('?')[1];
if(q != undefined){
    q = q.split('&');
    for(var i = 0; i < q.length; i++){
        hash = q[i].split('=');
        anchor = hash[1].split('#');
        vars.push(anchor[0]);
        vars[hash[0]] = anchor[0];
    }
}

-1

@Pauloppenheim द्वारा उत्तर में थोड़ा संशोधन, क्योंकि यह ठीक से पैरामीटर नामों को संभाल नहीं पाएगा जो अन्य पैरामीटर नामों का एक हिस्सा हो सकता है।

उदाहरण: यदि आपके पास "appenv" और "env" पैरामीटर हैं, तो "env" के लिए मान को फिर से पाना "appenv" मान को चुन सकता है।

ठीक कर:

var urlParamVal = function (name) {
    var result = RegExp("(&|\\?)" + name + "=(.+?)(&|$)").exec(location.search);
    return result ? decodeURIComponent(result[2]) : "";
};

-2

यह मदद कर सकता है।

<script type="text/javascript">
    $(document).ready(function(){
        alert(getParameterByName("third"));
    });
    function getParameterByName(name){
        var url     = document.URL,
            count   = url.indexOf(name);
            sub     = url.substring(count);
            amper   = sub.indexOf("&"); 

        if(amper == "-1"){
            var param = sub.split("=");
            return param[1];
        }else{
            var param = sub.substr(0,amper).split("=");
            return param[1];
        }

    }
</script>

1
इस कोड का अच्छी तरह से परीक्षण नहीं किया गया है। लगता है कि क्वेरी के साथ क्या होता है?twothrids=text
Lyth
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.