私はユーティリティ関数を作成しました。値の配列を渡し、それらの値がすべてクエリ文字列のキーであるかどうかをチェックします。すべての値がクエリ文字列のキーである場合はtrueを返し、そうでない場合はfalseを返します。ここでカスタムクエリ文字列パーサーが不正な結果を返します
は関数である。
function hasParams(haystack, needle){
var keys = [];
var needles = $.isArray(needle) ? needle : [needle];
var needles_len = needles.length;
var found = 0;
if(!haystack.indexOf('?') > 0){
return false;
}
var query = haystack.substr(haystack.indexOf('?') + 1).split("&");
for(var i=0;i<query.length;i++){
var key = query[i].split("=")[0];
keys.push(key);
}
for(var j=0;i<keys.length;j++){
for(var k=0;i<needles.length;k++){
if(keys[j] == needles[k]){
found++;
}
if(needles_len == found){
return true;
}
}
}
return false;
}
これは(クエリ文字列がstatus_filter_isとuser_filter_isの両方を含んでいるため)trueを返す必要がありますが、それはfalseを返します。
hasParams("/contacts/56f33c236d616354c0020000/tasks?contactable_type=Lead&id=56f33c236d616354c0020000&status_filter_is=unresolved&user_filter_is=all&action=index&controller=tasks&contact_id=56f33c236d616354c0020000&sort=date_due&direction=asc&page=", ['status_filter_is', 'user_filter_is'])
する必要があります。まず
i<keys.length;
は、第二j<keys.length;
i<needles.length;
でなければなりませんが、 'hasParams( "?FOO =バー")'有効なクエリ文字列のですか? if(!haystack.indexOf( '?')> 0){'は意図したとおりに動作しません。私はちょうど 'if(haystack.indexOf( '?')=== -1){' – Hammsをお勧めします。重複したキーはあなたに奇妙な振る舞いを与えます。 '?foo = bar&foo = baz '、例えば – Hamms