-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有一些错误:

  • 多个+s 不替换为空格。
  • 多个未转义的等号会导致内容丢失。
  • 空输入会产生一个带有键“”的对象。
  • 多个空键不会被丢弃

在下面的函数中,上面的错误已经被删除,并且已经在 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' 不会为 a 返回任何内容http://localhost/new_logic/test.php?a,因为 'a' 没有价值。也许你应该试试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 回答