2016-08-02 60 views
2

我需要通過名稱獲取查詢字符串參數。獲取包含所有字符的查詢字符串參數javascript

我的參數包括所有類型的字符,包括'='符號。

下面是一個例子:

http://MyProject/ResetPassword?userid=12489e2ss125-f031-4ef7d-95c9-80e894efc6a0&code=Ippr7HP/Fad2q3kKMehQtVYnbFcZp+h4ECS+RCQmN+KrcAM8N4tdeNciNEXlwkhnjF3tZgez1/a1Ca1018uXpodGEnPcyTjsfuSmyuS1hoRXY04wKLgiyW031aLAYmua8yXLDdghgjo+0s7SUD7LWFMapMP8b3eN//ycbe1QNm6RVc7ahMs77ng6i6p6MScBefU/Rnj5ME7ly7tqw==

我試過:

function getParameterByName(name) { 
var match = RegExp('[?&]' + name + '=([^&]*)').exec(window.location.search); 
return match && decodeURIComponent(match[1].replace(/\+/g, ' ')); 
} 

但它取代白色空格 '+' 號:

"Code":"Ippr7HP/Fad2q3kKMehQtVYnbFcZp h4ECS RCQmN KrcAM8N4tdeNciNEXlwkhnjF3tZgez1/a1Ca1018uXpodGEnPcyTJzsupjsfuSmyuS1hoRXY04wKLgiyW031aLAYmua8yXLDdghgjo 0s7SUD7LWFMapMP8b3eN//ycbe1QNm6RVc7ahMs77ng6i6p6MScBefU/Rnj5ME7ly7tqw==

我試過了:

function getParameterByName(key) { 
var vars = [], hash; 
var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&'); 
for (var i = 0; i < hashes.length; i++) { 
    hash = hashes[i].split('='); 
    vars.push(hash[0]); 
    vars[hash[0]] = hash[1]; 
} 
return vars[key]; 
} 

但那不包括'='標誌...

任何意見?

+0

所以加入回值部分...基本上...您的查詢字符串格式不正確的。如何修復生成它的內容,而不是試圖繞過錯誤? – Quentin

+0

@Quentin這是如何asp.net身份生成代碼,以重置密碼,我沒有寫我自己的,並不是真的想嘗試改變他們的系統.. – user3378165

回答

1

你的第二次嘗試是足夠接近,你只需要後.split('=')

function getParameterByName(parameterName) { 
    var query = window.location.search.substring(1); 
    var queryParameters = {}; 
    var vars = query.split('&'); 
    for (var i = 0; i < vars.length; i++) { 
     var keyValue = vars[i].split('='); 
     var key = keyValue[0]; 
     var value = keyValue.slice(1).join('='); 
     queryParameters[decodeURIComponent(key)] = decodeURIComponent(value); 
    } 

    return queryParameters[parameterName] 
} 
+0

非常感謝你,這工作完美!!只是一件事,我得到一個錯誤:'查詢未定義',所以我用它替換它:var var = window.location.href.slice(window.location.href.indexOf('?')+ 1).split ('&');'有沒有更短的方式?非常感謝! – user3378165

+0

是的,看到更新的答案 –

+0

工作perfectky,非常感謝你! – user3378165

相關問題