1

クエリ文字列を取得し (例:?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] 
4

1 に答える 1

2

あなたは正規表現ベースの実装を望んでいないと言っていますが、それがどのように見えるかを示すことが役立つと思いました:

params = {}
queryString.replace(/([^&=]+)=([^&=]*)/g, function($0, $1, $2) {
    (params[$1] = params[$1] || []).push($2);
});
// that's basically all about this

(質問に答えないため、CW)。

于 2012-03-01T11:53:09.183 に答える