javascript - जीईटी पैरामीटर से मूल्य कैसे प्राप्त करें?




url (20)

आप query.search में क्वेरी स्ट्रिंग प्राप्त कर सकते हैं, फिर आप प्रश्न चिह्न के बाद सबकुछ विभाजित कर सकते हैं:

var params = {};

if (location.search) {
    var parts = location.search.substring(1).split('&');

    for (var i = 0; i < parts.length; i++) {
        var nv = parts[i].split('=');
        if (!nv[0]) continue;
        params[nv[0]] = nv[1] || true;
    }
}

// Now you can get the parameters you want like so:
var abc = params.abc;

मेरे पास कुछ जीईटी पैरामीटर के साथ एक यूआरएल है:

www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5 

मुझे c का पूरा मूल्य प्राप्त करने की आवश्यकता है। मैंने यूआरएल पढ़ने की कोशिश की, लेकिन मुझे केवल m2 मिला। जावास्क्रिप्ट का उपयोग करके मैं यह कैसे करूं?


आप एक इनपुट बॉक्स जोड़ सकते हैं और फिर उपयोगकर्ता को उसमें मूल्य की प्रतिलिपि बनाने के लिए कह सकते हैं ... यह वास्तव में इस तरह से आसान है:

<h1>Hey User! Can you please copy the value out of the location bar where it says like, &m=2? Thanks! And then, if you could...paste it in the box below and click the Done button?</h1>
<input type='text' id='the-url-value' />
<input type='button' value='This is the Done button. Click here after you do all that other stuff I wrote.' />

<script>
//...read the value on click

ठीक है, गंभीरता से हालांकि ... मुझे यह कोड मिला और ऐसा लगता है कि यह अच्छा काम करता है:

http://www.developerdrive.com/2013/08/turning-the-querystring-into-a-json-object-using-javascript/

function queryToJSON() {
    var pairs = location.search.slice(1).split('&');

    var result = {};
    pairs.forEach(function(pair) {
        pair = pair.split('=');
        result[pair[0]] = decodeURIComponent(pair[1] || '');
    });

    return JSON.parse(JSON.stringify(result));
}

var query = queryToJSON();

ईसीएमएस्क्रिप्ट 6 समाधान:

var params = window.location.search
  .substring(1)
  .split("&")
  .map(v => v.split("="))
  .reduce((map, [key, value]) => map.set(key, decodeURIComponent(value)), new Map())

ऑब्जेक्ट में url क्वेरी पैरामीटर को पार्स करने के लिए angularJs स्रोत कोड यहां दिया गया है:

function tryDecodeURIComponent(value) {
  try {
    return decodeURIComponent(value);
  } catch (e) {
    // Ignore any invalid uri component
  }
}

function isDefined(value) {return typeof value !== 'undefined';}

function parseKeyValue(keyValue) {
  keyValue = keyValue.replace(/^\?/, '');
  var obj = {}, key_value, key;
  var iter = (keyValue || "").split('&');
  for (var i=0; i<iter.length; i++) {
    var kValue = iter[i];
    if (kValue) {
      key_value = kValue.replace(/\+/g,'%20').split('=');
      key = tryDecodeURIComponent(key_value[0]);
      if (isDefined(key)) {
        var val = isDefined(key_value[1]) ? tryDecodeURIComponent(key_value[1]) : true;
        if (!hasOwnProperty.call(obj, key)) {
          obj[key] = val;
        } else if (isArray(obj[key])) {
          obj[key].push(val);
        } else {
          obj[key] = [obj[key],val];
        }
      }
    }
  };
  return obj;
}

alert(JSON.stringify(parseKeyValue('?a=1&b=3&c=m2-m3-m4-m5')));

आप इस फ़ंक्शन को window.location जोड़ सकते हैं:

window.location.query = function query(arg){
  q = parseKeyValue(this.search);
  if (!isDefined(arg)) {
    return q;
  }      
  if (q.hasOwnProperty(arg)) {
    return q[arg];
  } else {
    return "";
  }
}

// assuming you have this url :
// http://www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5

console.log(window.location.query())

// Object {a: "1", b: "3", c: "m2-m3-m4-m5"}

console.log(window.location.query('c'))

// "m2-m3-m4-m5"

फिर भी एक और सुझाव।

पहले से ही कुछ अच्छे उत्तर हैं, लेकिन मैंने उन्हें समझने के लिए जटिल और कठिन समझ लिया। यह छोटा, सरल है, और यूआरएल में टोकन नामों के अनुरूप प्रमुख नामों के साथ एक साधारण सहयोगी सरणी देता है।

मैंने उन लोगों के लिए नीचे दी गई टिप्पणियों के साथ एक संस्करण जोड़ा जो सीखना चाहते हैं।

ध्यान दें कि यह अपने लूप के लिए jQuery ($ .each) पर निर्भर करता है, जिसे मैं प्रत्येक के बजाय अनुशंसा करता हूं। मुझे पुराने ब्राउज़र में जो भी नए फ़ंक्शंस समर्थित नहीं हैं, समर्थन करने के लिए अलग-अलग फ़िक्सेस में प्लगिंग करने के बजाय बोर्ड में jQuery का उपयोग करके क्रॉस-ब्राउज़र संगतता सुनिश्चित करना आसान लगता है।

संपादित करें: मैंने इसे लिखने के बाद मैंने एरिक इलियट के जवाब को देखा, जो लगभग समान है, हालांकि यह प्रत्येक के लिए उपयोग करता है, जबकि मैं आम तौर पर (ऊपर बताए गए कारणों के लिए) हूं।

function getTokens(){
    var tokens = [];
    var query = location.search;
    query = query.slice(1);
    query = query.split('&');
    $.each(query, function(i,value){    
        var token = value.split('=');   
        var key = decodeURIComponent(token[0]);     
        var data = decodeURIComponent(token[1]);
        tokens[key] = data;
    });
    return tokens;
}

टिप्पणी की गई संस्करण:

function getTokens(){
    var tokens = [];            // new array to hold result
    var query = location.search; // everything from the '?' onward 
    query = query.slice(1);     // remove the first character, which will be the '?' 
    query = query.split('&');   // split via each '&', leaving us an array of something=something strings

    // iterate through each something=something string
    $.each(query, function(i,value){    

        // split the something=something string via '=', creating an array containing the token name and data
        var token = value.split('=');   

        // assign the first array element (the token name) to the 'key' variable
        var key = decodeURIComponent(token[0]);     

        // assign the second array element (the token data) to the 'data' variable
        var data = decodeURIComponent(token[1]);

        tokens[key] = data;     // add an associative key/data pair to our result array, with key names being the URI token names
    });

    return tokens;  // return the array
}

नीचे दिए गए उदाहरणों के लिए हम यह पता मान लेंगे:

http://www.example.com/page.htm?id=4&name=murray

आप यूआरएल टोकन को अपने वैरिएबल पर असाइन कर सकते हैं:

var tokens = getTokens();

फिर प्रत्येक यूआरएल टोकन को इस तरह नाम से देखें:

document.write( tokens['id'] );

यह "4" प्रिंट करेगा।

आप सीधे फ़ंक्शन से aa टोकन नाम भी देख सकते हैं:

document.write( getTokens()['name'] );

... जो "murray" प्रिंट करेगा।


ब्राउज़र विक्रेताओं ने URL और URLSearchParams के माध्यम से ऐसा करने का मूल तरीका लागू किया है।

let url = new URL('http://www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5');
let searchParams = new URLSearchParams(url.search);
console.log(searchParams.get('c'));  // outputs "m2-m3-m4-m5"

वर्तमान में फ़ायरफ़ॉक्स, ओपेरा, सफारी और क्रोम में समर्थित है। एज समर्थन जल्द ही आ रहा है

https://developer.mozilla.org/en-US/docs/Web/API/URLSearchParams https://developer.mozilla.org/en-US/docs/Web/API/URL/URL

https://url.spec.whatwg.org/

Google के एक इंजीनियर एरिक बिडलमैन, असमर्थित ब्राउज़र के लिए इस पॉलीफिल का उपयोग करने recommends करते हैं।


मेरा समाधान यहाँ है। जैसा कि इस सवाल का जवाब देते हुए एंडी ई द्वारा सलाह दी गई है, यह आपकी स्क्रिप्ट के प्रदर्शन के लिए अच्छा नहीं है अगर यह बार-बार एक ही मूल्य प्राप्त करने के लिए विभिन्न रेगेक्स तारों, चलने वाली लूप आदि का निर्माण कर रहा है। तो, मैं एक सरल लिपि के साथ आया हूं जो एक ही ऑब्जेक्ट में सभी जीईटी पैरामीटर देता है। आपको इसे केवल एक बार कॉल करना चाहिए, परिणाम को एक चर के लिए असाइन करना चाहिए और उसके बाद, भविष्य में किसी भी बिंदु पर, उपयुक्त कुंजी का उपयोग करके उस चर से इच्छित कोई भी मूल्य प्राप्त करें। ध्यान दें कि यह यूआरआई डिकोडिंग (यानी% 20 की तरह चीजों) का ख्याल रखता है और किसी स्थान के साथ + को प्रतिस्थापित करता है:

 function getUrlQueryParams(url) {
  var queryString = url.split("?")[1];
  var keyValuePairs = queryString.split("&");
  var keyValue = [];
  var queryParams = {};
  keyValuePairs.forEach(function(pair) {
    keyValue = pair.split("=");
    queryParams[keyValue[0]] = decodeURIComponent(keyValue[1]).replace(/\+/g, " ");
});
  return queryParams;
}

तो, यहां देखने के लिए स्क्रिप्ट के कुछ परीक्षण दिए गए हैं:

// Query parameters with strings only, no special characters.
var currentParams = getUrlQueryParams("example.com/foo?number=zero");
alert(currentParams["number"]); // Gives "zero".

// For the URL you stated above...
var someParams = getUrlQueryParams("www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5 ");
alert(someParams["c"]); // Gives "m2-m3-m4-m5".

// For a query params with URI encoding...
var someParams = getUrlQueryParams("www.example.com/t.html?phrase=a%20long%20shot&location=Silicon+Valley%2C+USA");
alert(someParams["phrase"]); // Gives "a long shot".
alert(someParams["location"]); // Gives "Silicon Valley, USA".

मैं parseUri पुस्तकालय का उपयोग करें। यह आपको वही करने की अनुमति देता है जो आप पूछ रहे हैं:

var uri = 'www.test.com/t.html&a=1&b=3&c=m2-m3-m4-m5';
var c = uri.queryKey['c'];
// c = 'm2-m3-m4-m5'

मैंने इस उम्र पहले पाया, बहुत आसान:

function getUrlVars() {
    var vars = {};
    var parts = window.location.href.replace(/[?&]+([^=&]+)=([^&]*)/gi,    
    function(m,key,value) {
      vars[key] = value;
    });
    return vars;
  }

फिर इसे इस तरह कहते हैं:

var fType = getUrlVars()["type"];

मैंने एक और सरल और सुरुचिपूर्ण समाधान लिखा था।

var arr = document.URL.match(/room=([0-9]+)/)
var room = arr[1];

मैंने देखा है कि अधिकांश कार्यान्वयन नाम और मानों को यूआरएल-डीकोडिंग याद करते हैं।

यहां एक सामान्य उपयोगिता फ़ंक्शन है जो उचित यूआरएल-डिकोडिंग भी करता है:

function getQueryParams(qs) {
    qs = qs.split('+').join(' ');

    var params = {},
        tokens,
        re = /[?&]?([^=]+)=([^&]*)/g;

    while (tokens = re.exec(qs)) {
        params[decodeURIComponent(tokens[1])] = decodeURIComponent(tokens[2]);
    }

    return params;
}

//var query = getQueryParams(document.location.search);
//alert(query.foo);

यह सिर्फ एक पैरामीटर की जांच करने का एक आसान तरीका है:

उदाहरण यूआरएल:

    http://myserver/action?myParam=2

उदाहरण जावास्क्रिप्ट:

    var myParam = location.search.split('myParam=')[1]

यदि URL में "myParam" मौजूद है ... वैरिएबल myParam में "2" होगा, अन्यथा यह अनिर्धारित होगा।

हो सकता है कि आप एक डिफ़ॉल्ट मान चाहते हैं, उस स्थिति में:

    var myParam = location.search.split('myParam=')[1] ? location.search.split('myParam=')[1] : 'myDefaultValue';

(अद्यतन) यह काम बेहतर है:

    var url = "http://www.example.com/index.php?myParam=384&login=admin"; // or window.location.href for current url
    var captured = /myParam=([^&]+)/.exec(url)[1]; // Value is in [1] ('384' in our case)
    var result = captured ? captured : 'myDefaultValue';

और जब यह पैरामीटर पैरामीटर से भरा होता है तब भी यह सही काम करता है।


यहां मैं एक उदाहरण पोस्ट कर रहा हूं। लेकिन यह jQuery में है। उम्मीद है कि यह दूसरों की मदद करेगा:

<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="jquery.url.js"></script>

<!-- URL:  www.example.com/correct/?message=done&year=1990-->

<script type="text/javascript">
$(function(){
    $.url.attr('protocol')  // --> Protocol: "http"
    $.url.attr('path')          // --> host: "www.example.com"
    $.url.attr('query')         // --> path: "/correct/"
    $.url.attr('message')   // --> query: "done"
    $.url.attr('year')      // --> query: "1990"
});
</script>

या यदि आप यूआरआई पार्सिंग व्हील URI.js उपयोग नहीं करना चाहते हैं

Foo नामक पैरामीटर का मान प्राप्त करने के लिए:

new URI((''+document.location)).search(true).foo

वह क्या करता है

  1. दस्तावेज़ को एक स्ट्रिंग में बदलें। यह एक ऑब्जेक्ट है)
  2. फ़ीड करें कि URI.js के यूआरआई कक्षा कंस्ट्रक्टर को स्ट्रिंग करें
  3. Url के खोज (क्वेरी) भाग को प्राप्त करने के लिए खोज () फ़ंक्शन को आमंत्रित करें
    (गुजरने से यह एक वस्तु को आउटपुट करने के लिए कहता है)
  4. मूल्य प्राप्त करने के लिए परिणामस्वरूप ऑब्जेक्ट पर foo प्रॉपर्टी तक पहुंचें

इसके लिए यहां एक पहेली है .... http://jsfiddle.net/m6tett01/12/


हम सभी पैरामीटर को लूप किए बिना सी पैरामीटर मानों को सरल तरीके से प्राप्त कर सकते हैं, पैरामीटर प्राप्त करने के लिए नीचे दिए गए jQuery को देखें।

1. पैरामीटर मान प्राप्त करने के लिए:

var url = "www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5";

url.match(**/(c=)[0-9A-Za-z-]+/ig**)[0].replace('c=',"")

(या)

url.match(**/(c=)[0-z-]+/ig**)[0].replace('c=',"")

एक स्ट्रिंग के रूप में लौटता है

"एम 2-एम 3-m4-M5"

2. पैरामीटर मान को बदलने के लिए:

var url = "www.test.com/t.html?a=1&b=3&c=m2-m3-m4-m5";

url.replace(**/(c=)[0-9A-Za-z-]+/ig, "c=m2345"**)

source

function gup( name, url ) {
    if (!url) url = location.href;
    name = name.replace(/[\[]/,"\\\[").replace(/[\]]/,"\\\]");
    var regexS = "[\\?&]"+name+"=([^&#]*)";
    var regex = new RegExp( regexS );
    var results = regex.exec( url );
    return results == null ? null : results[1];
}
gup('q', 'hxxp://example.com/?q=abc')

यह देखो

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("Parameter:" + arrParamValues[i]);
                return arrParamValues[i];
            }
        }
        return "No Parameters Found";
    }
}

सिंगल पैरामीटर वैल्यू के लिए इस index.html की तरह? Msg = 1 निम्नलिखित कोड का उपयोग करें,

$(window).load(function(){
    queryString();
});

function queryString()
{
    var queryString = window.location.search.substring(1);
    var varArray = queryString.split("="); //eg. index.html?msg=1

    var param1 = varArray[0];
    var param2 = varArray[1];

}

कोड के बाद सभी पैरामीटर मूल्य उपयोग के लिए,

$(window).load(function(){
    queryString();
});

function queryString()
{
    var queryString = window.location.search;
    var varArray = queryString.split("&");
    for (var i=0;i<varArray.length;i++) {
      var param = varArray[i].split("=");
        //parameter-value pair
    }
} 

// http:localhost:8080/path?param_1=a&param_2=b
var getParamsMap = function () {
    var params = window.location.search.split("&");
    var paramsMap = {};
    params.forEach(function (p) {
        var v = p.split("=");
        paramsMap[v[0]]=decodeURIComponent(v[1]);
    });
    return paramsMap;
};

// -----------------------

console.log(getParamsMap()["param_1"]);  // should log "a"     

function getParamValue(param) {
    var urlParamString = location.search.split(param + "=");
    if (urlParamString.length <= 1) return "";
    else {
        var tmp = urlParamString[1].split("&");
        return tmp[0];
    }
}

यह आपके मामले के लिए काम करना चाहिए चाहे कोई भी परम न हो या नहीं।






url