2009-05-02 34 views

Trả lời

47
function parseURLParams(url) { 
    var queryStart = url.indexOf("?") + 1, 
     queryEnd = url.indexOf("#") + 1 || url.length + 1, 
     query = url.slice(queryStart, queryEnd - 1), 
     pairs = query.replace(/\+/g, " ").split("&"), 
     parms = {}, i, n, v, nv; 

    if (query === url || query === "") return; 

    for (i = 0; i < pairs.length; i++) { 
     nv = pairs[i].split("=", 2); 
     n = decodeURIComponent(nv[0]); 
     v = decodeURIComponent(nv[1]); 

     if (!parms.hasOwnProperty(n)) parms[n] = []; 
     parms[n].push(nv.length === 2 ? v : null); 
    } 
    return parms; 
} 

Sử dụng như sau:

var urlString = "http://www.foo.com/bar?a=a+a&b%20b=b&c=1&c=2&d#hash"; 
    urlParams = parseURLParams(urlString); 

mà trả về một một đối tượng như thế này:

{ 
    "a" : ["a a"],  /* param values are always returned as arrays */ 
    "b b": ["b"],  /* param names can have special chars as well */ 
    "c" : ["1", "2"] /* an URL param can occur multiple times!  */ 
    "d" : [null]  /* parameters without values are set to null */ 
} 

Vì vậy

parseURLParams("www.mints.com?name=something") 

cho

{name: ["something"]} 

EDIT: Các original version of this answer sử dụng một cách tiếp cận regex dựa trên URL phân tích cú pháp. Nó sử dụng một hàm ngắn hơn, nhưng cách tiếp cận này là thiếu sót và tôi đã thay thế nó bằng một trình phân tích cú pháp thích hợp.

+0

Lời xin lỗi của tôi, tôi không phải là chuyên gia biên tập chuyên nghiệp! :) –

+0

@Tomalak bạn có thể cho tôi biết cách in giá trị của tên không? tôi đang cố gắng sử dụng tập lệnh này và khi tôi sử dụng document.write (urlParams); nó mang lại cho tôi [đối tượng] nhưng tôi không nhận được giá trị thực tế .. Bạn có thể giúp tôi với điều này không? –

+0

@KiranVemuri: Hãy thử 'console.log (JSON.stringify (urlParams))' – Daenarys

3

Đây là một giải pháp. Tất nhiên, chức năng này không cần tải vào tùy chọn "window.params" - có thể được tùy chỉnh.

window.params = function(){ 
    var params = {}; 
    var param_array = window.location.href.split('?')[1].split('&'); 
    for(var i in param_array){ 
     x = param_array[i].split('='); 
     params[x[0]] = x[1]; 
    } 
    return params; 
}(); 

Ví dụ cuộc gọi API trên http://www.mints.com/myurl.html?name=something&goal=true:

if(window.params.name == 'something') doStuff(); 
else if(window.params.goal == 'true') shoutGOOOOOAAALLL(); 
5

Tôi nghĩ rằng đây cũng nên làm việc:

function $_GET(q,s) { 
    s = (s) ? s : window.location.search; 
    var re = new RegExp('&amp;'+q+'=([^&amp;]*)','i'); 
    return (s=s.replace(/^\?/,'&amp;').match(re)) ?s=s[1] :s=''; 
} 

Chỉ cần gọi nó như thế này:

var value = $_GET('myvariable'); 
1

Iv'e câu trả lời của Tomalak cố định/cải tiến với:

  • Chỉ tạo một mảng nếu cần.
  • Nếu có một biểu tượng phương trình khác có giá trị bên trong giá trị
  • Hiện tại, giá trị này sử dụng giá trị location.search thay vì url.
  • Kết quả chuỗi tìm kiếm trống trong một đối tượng trống.

Code:

function getSearchObject() { 
    if (location.search === "") return {}; 

    var o = {}, 
     nvPairs = location.search.substr(1).replace(/\+/g, " ").split("&"); 

    nvPairs.forEach(function (pair) { 
     var e = pair.indexOf('='); 
     var n = decodeURIComponent(e < 0 ? pair : pair.substr(0,e)), 
      v = (e < 0 || e + 1 == pair.length) 
       ? null : 
       decodeURIComponent(pair.substr(e + 1,pair.length - e)); 
     if (!(n in o)) 
      o[n] = v; 
     else if (o[n] instanceof Array) 
      o[n].push(v); 
     else 
      o[n] = [o[n] , v]; 
    }); 
    return o; 
} 
0

Tôi cũng điên một chức năng khá đơn giản. Bạn gọi bằng cách: get ("yourgetname");

và nhận bất kỳ thứ gì. (bây giờ mà tôi đã viết nó tôi nhận thấy nó sẽ cung cấp cho bạn 26% nếu bạn đã có một & về giá trị của bạn ..)

function get(name){ 
    var url = window.location.search; 
    var num = url.search(name); 
    var namel = name.length; 
    var frontlength = namel+num+1; //length of everything before the value 
    var front = url.substring(0, frontlength); 
    url = url.replace(front, ""); 
    num = url.search("&"); 

if(num>=0) return url.substr(0,num); 
if(num<0) return url;    
} 
1

Câu trả lời hiện đang được chọn không làm việc tốt ở tất cả các trường hợp của tôi, mà tôi cảm thấy là một hình ảnh khá điển hình. Tôi tìm thấy chức năng dưới đây here và nó hoạt động tuyệt vời!

function getAllUrlParams(url) { 

    // get query string from url (optional) or window 
    var queryString = url ? url.split('?')[1] : window.location.search.slice(1); 

    // we'll store the parameters here 
    var obj = {}; 

    // if query string exists 
    if (queryString) { 

    // stuff after # is not part of query string, so get rid of it 
    queryString = queryString.split('#')[0]; 

    // split our query string into its component parts 
    var arr = queryString.split('&'); 

    for (var i=0; i<arr.length; i++) { 
     // separate the keys and the values 
     var a = arr[i].split('='); 

     // in case params look like: list[]=thing1&list[]=thing2 
     var paramNum = undefined; 
     var paramName = a[0].replace(/\[\d*\]/, function(v) { 
     paramNum = v.slice(1,-1); 
     return ''; 
     }); 

     // set parameter value (use 'true' if empty) 
     var paramValue = typeof(a[1])==='undefined' ? true : a[1]; 

     // (optional) keep case consistent 
     paramName = paramName.toLowerCase(); 
     paramValue = paramValue.toLowerCase(); 

     // if parameter name already exists 
     if (obj[paramName]) { 
     // convert value to array (if still string) 
     if (typeof obj[paramName] === 'string') { 
      obj[paramName] = [obj[paramName]]; 
     } 
     // if no array index number specified... 
     if (typeof paramNum === 'undefined') { 
      // put the value on the end of the array 
      obj[paramName].push(paramValue); 
     } 
     // if array index number specified... 
     else { 
      // put the value at that index number 
      obj[paramName][paramNum] = paramValue; 
     } 
     } 
     // if param name doesn't exist yet, set it 
     else { 
     obj[paramName] = paramValue; 
     } 
    } 
    } 

    return obj; 
} 
+0

giống tại đây, trang này hoạt động giống như nét duyên dáng – Plastic

Các vấn đề liên quan