2011-12-13 10 views
42

संभव डुप्लिकेट:
Use the get paramater of the url in javascript
Get query string values in JavaScriptजावास्क्रिप्ट में, मैं URL क्वेरी पैरामीटर का विश्लेषण कैसे करूं?

जावास्क्रिप्ट में, कैसे मैं एक URL स्ट्रिंग (नहीं वर्तमान URL) के मापदंडों मिल सकता है?

की तरह:

www.domain.com/?v=123&p=hello 

मैं "वी" और एक JSON ऑब्जेक्ट में "पी" मिल सकता है?

+2

भी यूआरएल पार्स कर सकते हैं आप बात http://stackoverflow.com/questions/901115/get-query-string-values-in-javascript –

+0

यहाँ एक अच्छा है पर इस पोस्ट की जांच कर सकते छोटा [स्निपेट] (http: //www.onlineaspect।कॉम/2009/06/10/पढ़ने-मिल-चर-साथ-जावास्क्रिप्ट /)। – Purag

+0

नियमित अभिव्यक्ति के बिना उत्तर दें http://stackoverflow.com/questions/19491336/get-url-parameter-jquery/21903119?noredirect=1#comment47504324_21903119 –

उत्तर

73

आज (इस उत्तर के 2.5 साल बाद) आप safely useArray.forEach कर सकते हैं। जैसा कि @ricosrealm सुझाव देता है, decodeURIComponent इस फ़ंक्शन में उपयोग किया गया था।

function getJsonFromUrl() { 
    var query = location.search.substr(1); 
    var result = {}; 
    query.split("&").forEach(function(part) { 
    var item = part.split("="); 
    result[item[0]] = decodeURIComponent(item[1]); 
    }); 
    return result; 
} 

वास्तव में यह, टिप्पणी में सहकर्मी की समीक्षा देखें कि सरल नहीं है, विशेष रूप से:

  • हैश आधारित रूटिंग (@cmfolio)
  • सरणी मानकों (@ user2368055)
  • decodeURIComponent (@AndrewF) का उचित उपयोग

शायद थाई रों एसई codereview के पास जाना चाहिए, लेकिन यहाँ सुरक्षित है और regexp मुक्त कोड:

function getJsonFromUrl(hashBased) { 
    var query; 
    if(hashBased) { 
    var pos = location.href.indexOf("?"); 
    if(pos==-1) return []; 
    query = location.href.substr(pos+1); 
    } else { 
    query = location.search.substr(1); 
    } 
    var result = {}; 
    query.split("&").forEach(function(part) { 
    if(!part) return; 
    part = part.split("+").join(" "); // replace every + with space, regexp-free version 
    var eq = part.indexOf("="); 
    var key = eq>-1 ? part.substr(0,eq) : part; 
    var val = eq>-1 ? decodeURIComponent(part.substr(eq+1)) : ""; 
    var from = key.indexOf("["); 
    if(from==-1) result[decodeURIComponent(key)] = val; 
    else { 
     var to = key.indexOf("]",from); 
     var index = decodeURIComponent(key.substring(from+1,to)); 
     key = decodeURIComponent(key.substring(0,from)); 
     if(!result[key]) result[key] = []; 
     if(!index) result[key].push(val); 
     else result[key][index] = val; 
    } 
    }); 
    return result; 
} 

मैं भी प्रतिस्थापित गैर इनकोडिंग this article के अनुसार अंतरिक्ष के लिए + जो भी आरएफसी 3986.

का पालन कर सांकेतिक शब्दों में बदलना करने के लिए कैसे उपयोगी गाइड है

result[key][index] = val पर ध्यान दें: एक नया सरणी आइटम बनाया गया है, यह गणना योग्य है, इसलिए इसे forEach कॉल द्वारा पुनरावृत्त किया जा सकता है। इसलिए, आप की तरह

var url = "?foo%20e[]=a%20a&foo+e[%5Bx%5D]=b&foo e[]=c"; 
// {"foo e": ["a a", "c", "[x]":"b"]} 

var obj = getJsonFromUrl(url)["foo e"]; 
for(var key in obj) { // Array.forEach would skip string keys here 
    console.log(key,":",obj[key]); 
} 
/* 
    0 : a a 
    1 : c 
    [x] : b 
*/ 
+6

प्रत्येक आइटम को डीकोडुरिकॉम्पोनेंट() – ricosrealm

+0

' स्थान का उपयोग करके डीकोड किया जाना चाहिए। खोज 'हैश आधारित रूटिंग पर काम नहीं करता है: 'http: // localhost: 9000/#/दस्तावेज़? lang = es'' location.search' के लिए खाली स्ट्रिंग लौटाएगा। आपको इसके बजाय 'location.hash' या' location.href' का उपयोग करना होगा। – cmfolio

+0

यह सरणी मानकों के लिए काम नहीं करेगा – user2368055

-16
var v = window.location.getParameter('v'); 
var p = window.location.getParameter('p'); 

अब वी और पी क्रमशः उन में जिन वस्तुओं पर 123 है और हैलो

+7

ऐसी कोई विधि नहीं [spec में] (http: //www.w3 .org/TR/खिड़की/# स्थान)। – katspaugh

+0

यह Google वेब टूलकिट में एक विधि है और वेनिला जेएस में नहीं है। –

18

आप कुछ इस तरह से मानकों का एक जावास्क्रिप्ट वस्तु (मानचित्र) मिल सकता है:

var regex = /[?&]([^=#]+)=([^&#]*)/g, 
    url = window.location.href, 
    params = {}, 
    match; 
while(match = regex.exec(url)) { 
    params[match[1]] = match[2]; 
} 

नियमित अभिव्यक्ति में काफी सुधार किया जा सकता है। यह केवल = वर्णों से अलग नाम-मूल्य जोड़ों की तलाश करता है, और जोड़े स्वयं & वर्णों से अलग होते हैं (या पहले के लिए = वर्ण)। आपके उदाहरण के लिए, ऊपर परिणाम होगा में:

{v: "123", p: "hello"}

यहाँ एक working example है।

+0

क्यों window.location.get पैरामीटर का उपयोग नहीं करते? – codeAnand

+0

आपका उदाहरण किसी ऑब्जेक्ट को वापस नहीं करता है (यह 2 तार देता है), और इसके लिए आपको पैरामीटर के नामों को पहले से जानने की आवश्यकता है, जो कि ओपी क्या करने की कोशिश कर रहा है, यह मामला होने की संभावना नहीं है। साथ ही, 'गेट पैरामीटर' के लिए प्रलेखन कहां है? –

+2

परम नाम तकनीकी रूप से '[^ = # &] + 'की बजाय' [^ = #] + 'है - बिना किसी मूल्य के नाम कानूनी और सामान्य है। यह भी सुनिश्चित करें कि नाम और मूल्य दोनों डीकोड किए गए हैं: 'पैराम्स [डीकोडुरिकोम्पोनेंट (मैच [1])] = डीकोडुरिकोम्पोनेंट (मैच [2]); ' – AndrewF

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