クエリ文字列を取得し (例:?name=value1&type=value2&name=value3&type=value4...
ただし、このコードは、渡されたクエリ文字列を処理できる必要があります)、そこからオブジェクトを作成する必要があります。
これを行う関数をほぼ完成させました。ただし、私のロジックは、最後の for ループ内で少しずれています。誰かが私が間違っている場所を指摘できれば、本当に感謝しています!
まず、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 で最後の & here を削除するのはファンキーだと思いますが、ここではまったく焦点を当てたくありません。)
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]