-2

リンクhttp://safalra.com/web-design/javascript/parsing-query-strings/からデータを抽出しています。Firefox では問題なく動作しますが、Google Chrome はこの機能をサポートしていません。クエリ文字列の内容を抽出するためのより良い方法または代替手順はありますか?

<script type="text/javascript">
    var _url = window.location
    alert(_url);
    var queryData = parseQueryString(_url.toString());
    var p = queryData['http://localhost/new_logic/test.php?a'];
    alert(queryData);
    var q = queryData['b'];
</script>
4

4 に答える 4

6

リンク先のページの作成者によって作成されたparseQueryString()関数は、明らかに Chrome で実行されない JavaScript コードを呼び出します。

これは、Chrome が一般的に QueryStrings をサポートしていないという意味ではありません。parseQueryString()この機能は本質的にグローバルであり、本質的にすべてのブラウザーに組み込まれていると想定しているようです。それどころか、作者が作成したカスタム関数です。

ページ上の連絡フォームを使用して作成者に電子メールを送信するか、JavaScript ファイルを詳しく調べて、サポートされていないものを正確に確認することをお勧めします。

于 2009-02-23T06:44:29.903 に答える
5

http://safalra.com/web-design/javascript/parsing-query-strings/の parseQueryString にはいくつかのバグがあります。

  • 複数+の はスペースに置き換えられません。
  • エスケープされていない等号が複数あると、コンテンツが失われます。
  • 空の入力は、キー "" を持つオブジェクトになります。
  • 複数の空のキーは破棄されません

以下の関数では、上記のバグが削除され、Firefox 3、Internet Explorer 7、Opera 9、および Google Chrome 1 でテストされています。

function parseQueryString(input){
    var out={}, decode=decodeURIComponent, s=input||location.search||"",
        kv=("?"===s.charAt(0)?s.slice(1):s).replace(/\+/g," ").split(/[&;]/g),
        idx=-1,key,value;
    while(++idx<kv.length){
        if (kv[idx]==="") continue;
        value=kv[idx].split("=");
        key=decode(value.shift());
        (out[key]||(out[key]=[])).push(decode(value.join("=")));
    }
    return out;
}

上記の関数 (および元の関数) は、URLのクエリ部分 (疑問符から文字列の末尾または最初の # まで) のみを想定しています。引数が指定されていない場合、ブラウザの現在の場所の URL からクエリ部分が自動的に抽出されます。

結果はクエリ文字列からのキーを持つオブジェクトであり、すべてのキーの値はすべての値の配列です。

var data = parseQueryString("?a=test1&a=test2&b=test3");

//Result of data:
{
    a:["test1","test2"],
    b:["test3"]
}

いくつかの例:

// Alert all values of the a key:
if (data.a && data.a.length) {
  for (var i=0;i<data.a.length;++i)
    alert(data.a[i]);
}

// Get the first value of a-key:
var value_a = data.a && data.a[0];

// Get the first value of a-key or default:
var value_a = data.a && data.a[0] || "default";
于 2009-02-23T17:21:10.433 に答える
1

'parseQuerySTRing' を使用したコードではhttp://localhost/new_logic/test.php?a、'a' には値がないため、 a in に対して何も返されません。おそらく試してみてくださいhttp://localhost/new_logic/test.php?a=1&b=2&c=3。これで、queryData.a は 1、queryData.b 2 などを返すはずです。

于 2009-02-23T07:22:52.587 に答える
0

スクリプトは入力として検索部分のみを想定しているようですが、Chrome の最新バージョンでは機能します。

 <script type="text/javascript">
     var _url = window.location.search;
     alert(_url);
     var queryData = parseQueryString(_url.toString());
     var p = queryData['a'];
     alert(p);
     var q = queryData['b'];
     alert(q);
 </script>

ディスプレイ

?a=aval&b=bval
aval
bval
于 2009-02-23T06:45:55.843 に答える