我需要一個查詢字符串(例如:?name=value1&type=value2&name=value3&type=value4...
,但此代碼應該能夠處理傳遞給它的任何查詢字符串)並從中創建一個對象。QueryString Javascript集合對象能夠處理數組
我已經差不多完成了這個功能。但是,我的邏輯在最後一個循環內有點偏離。如果有人能指出我出錯的地方,我會非常感激!
首先我抓住使用jQuery的$.get
功能的查詢字符串:
$.get("xmlreader.php", function(data) {
var queryParams = [];
var qString = data;
// test qString for & at the end
var last = qString.lastIndexOf("&");
if(last == qString.length - 1) {
// then there is a & to remove
qString = qString.substring(0,qString.length-1);
}
getParamObj(qString);
});
(我知道這是時髦,我刪除最後一個&在我的JavaScript,但我並不想在這裏重點,在所有。)
然後我打電話getParamObject(qString);
構建實際徵收對象:
function getParamObj(parameterString) {
var qString = parameterString;
var parameters = qString.split("&");
parameters[0] = parameters[0].substring(1);
var paramObject = new Object();
for(var index = 0; index < parameters.length; ++index) {
var equalsPos = parameters[index].indexOf("=");
var key = parameters[index].substring(0,equalsPos);
var stringLength = parameters[index].length;
var value = parameters[index].substring(equalsPos + 1, stringLength);
if(!paramObject[key]) {
console.log("paramObject[key] = " + paramObject[key]);
paramObject[key] = value;
if(paramObject[key] instanceof Array) {
console.log("instance of array");
paramObject[key].push(value);
} else {
var newArray = [];
var existingValue = paramObject[key];
console.log("existing value: " + existingValue);
console.log("value: " + value);
newArray.push(existingValue);
newArray.push(value);
paramObject[key] = newArray;
}
}
}
設定的功能離子正常工作 - 幾乎正確。當我測試時,有幾件事情是錯誤的:在最後一個條件existingValue和value是相同的。也可能有其他問題,但我認爲這是主要問題。
我見過使用正則表達式的方法,但我不想在此處使用該路線。
注:我已經回答了我的問題LOL ...堆棧不會讓我評論這個,因爲我沒有。雖然你說你剛剛58代表:)
[code]
if(!paramObject[key]) {
console.log("paramObject[key] = " + paramObject[key]);
paramObject[key] = value;
console.log("paramObject[key] = value = " + value + paramObject[key]);
console.log(paramObject[key]);
}
else if(paramObject[key] instanceof Array) {
paramObject[key].push(value);
console.log("value if arra" + value);
} else {
var newArray = [];
var existingValue = paramObject[key];
console.log("existing value: " + existingValue);
console.log("value: " + value);
newArray.push(existingValue);
newArray.push(value);
paramObject[key] = newArray;
}
[/code]
那麼,用'paramObject [key] = value;'和'var existingValue = paramObject [key];'你基本上在做'var existingValue = value'不是嗎? – pimvdb 2012-03-01 11:28:40
我已經解決了我自己的問題大聲笑... – 2012-03-01 12:47:28
謝謝 - 抱歉,不是故意只說'我解決了它'...堆棧不會讓我在這裏發佈答案。我添加它作爲我的問題的一個筆記。 – 2012-03-01 12:55:04