我需要一个查询字符串(例如:?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