2013-12-19 32 views
10

希望你會發現下面的函數可用於查詢字符串轉換成JSON對象的Javascript查詢字符串轉換成JSON使用jQuery和回查詢字符串

var queryStringToJSON = function (url) { 
    if (url === '') 
     return ''; 
    var pairs = (url || location.search).slice(1).split('&'); 
    var result = {}; 
    for (var idx in pairs) { 
     var pair = pairs[idx].split('='); 
     if (!!pair[0]) 
      result[pair[0].toLowerCase()] = decodeURIComponent(pair[1] || ''); 
    } 
    return result; 
} 

用法:

爲了獲得當前窗口查詢串

var result = queryStringToJSON() // without any parameter 

從自定義查詢字符串得到JSON:

var result = queryStringToJSON('?name=prem&age=30&HEIGHT=5.8') 

輸出:{name:"prem", age:"30", height:"5.8"} //All keys are converted into small letters

要將其轉換回網址,你可以使用jQuery的PARAM方法

$.param(result) 

爲了操縱您的查詢字符串在JavaScript中,你可以簡單的使用標準對象操作並再次使用$ .param方法

result.age=35; 
delete result['name']; 
+3

那麼你的問題是什麼? –

+0

他只是發佈了他的有用功能來幫助別人...所以這裏沒問題... –

+1

那麼爲什麼我在「問題」部分找到這個? –

回答

1

工作,但如果你使用url || location.search那麼你應該刪除if(url === '') return ''也應該是這樣,

var queryStringToJSON = function (url) { 
    url = url || location.search;// url or location.search 
    if (url === '') 
     return '';// return if url and location.search not found 
    // your remainig code 
} 
+0

瞭解,但這是一項特殊檢查。 ''在字符串操作中是特殊的謬誤值。所以我只想檢查一下,如果falsy值是空字符串,就按照原樣返回。 –

+0

然後你不應該使用'var pairs =(url || location.search).slice(1).split('&');' –

1

或者...而不是:

for (var idx in pairs) { 
    var pair = pairs[idx].split('='); 
    if (!!pair[0]) 
     result[pair[0].toLowerCase()] = decodeURIComponent(pair[1] || ''); 
} 

嘗試:

result = pairs.reduce(function(a,b) { 
    var pair = b.split("="); 
    a[pair[0].toLowerCase()] = decodeURIComponent(pair[1] || ''); 
    return a; 
},{}); 

工作原理相同,但使用原生JavaScript函數reduce(),速度可能更快。

+0

'行'location.search'你需要一個polyfill來減少你需要支持的IE8或這裏:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce#Polyfill – Dave