アップデートに見て:ここで私はそれについてHTMLグッズのための1時間に書いた記事です:シンプルptq
(パース--クエリを)機能を見てみましょうhttp://www.htmlgoodies.com/beyond/javascript/article.php/11877_3755006_2
は、関数のライブラリの一つは、私はそれが簡単です使用して2001年
function ptq(s, q) {
var i, p;
s = s.replace(/\+/g, ' ').replace(/;/g, '&').split('&');
q = q || {};
for (i=0; i<s.length; i++) {
p = s[i].split('=', 2);
q[unescape(p[0])] = unescape(p[1]);
}
return q;
}
それも非常に古いJavaScriptのバージョンで動作し、中に書いた:
の
var q = ptq(location.search.substring(1));
/* grab query string after the initial "?" delimiter */
プロパティは、GETリクエストのクエリ文字列を介して電流URLに提出したHTMLフォームの値で定義された任意のname=value
ペアに対応します。
例えば、HTMLフォームが内容「ジョセフ」とし、HTMLページfile.html
にそのaction
属性で指定され、このフォームが送信されたならば、GET要求はfile.html」になりますname
という名前のフィールドが含まれている場合?名前= Joseph "となり、q.name
の値は文字列リテラル"Joseph"
と等しくなります。
escape
/unescape
のようなコードの一部は、JavaScriptの後の機能が利用できる場合、より新しい同等のものがあります。
このコードの後のリビジョンを掘り下げて、URLで "file.html?name = Joseph & secure"のようなブール値パラメータを使用することもできます。ただし、HTMLフォームを送信するときにブラウザによって生成されることはありません。また使いやすいです。コードにq = param();
と書いてください。これはLincoln D. SteinのCGI.pmモジュールの構文と似ています。
function ptq(q)
{
/* parse the query */
/* semicolons are nonstandard but we accept them */
var x = q.replace(/;/g, '&').split('&'), i, name, t;
/* q changes from string version of query to object */
for (q={}, i=0; i<x.length; i++)
{
t = x[i].split('=', 2);
name = unescape(t[0]);
if (!q[name])
q[name] = [];
if (t.length > 1)
{
q[name][q[name].length] = unescape(t[1]);
}
/* next two lines are nonstandard */
else
{
q[name][q[name].length] = true;
}
}
return q;
}
function param()
{
return ptq(location.search.substring(1).replace(/\+/g, ' '));
}
この新しいリビジョンでは、すべてのフォームフィールドが配列として返されることに注意してください。標準では同じ名前の複数のフォームフィールドが使用できるため、フォームフィールドの値のデータ型が正しい場合は文字列の配列なので、これははるかに適切です。
これは役に立つかもしれません。 http://stackoverflow.com/a/8649003 –
これを処理する簡単な答えは、+記号を最初にスペースで置き換えてから、残りのデータをデコードすることです。しかし、実際にはクエリ文字列パーサーが必要です。 –