2009-02-23 127 views
-2

我从链接中提取数据,http://safalra.com/web-design/javascript/parsing-query-strings/。它在Firefox中运行良好,但Google Chrome不支持此功能。是否有更好的方法或替代过程来提取查询字符串内容?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> 

回答

5

http://safalra.com/web-design/javascript/parsing-query-strings/的parseQueryString有一些错误:

  • + s的不带空格代替。
  • 多个未转义的等号会导致内容丢失。
  • 空输入结果在带有键“”的对象中。
  • 多个空键不被丢弃

在下面的功能,虫子上述已被删除,它已在Firefox 3,因特网浏览器,歌剧  9和谷歌浏览器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"; 
6

通过你的链接页面的作者创建的parseQueryString()功能明显会调用无法在Chrome上运行一些JavaScript代码。

这并不意味着Chrome一般不支持QueryStrings。看起来你已经认为parseQueryString()函数本质上是全局的,并且固有地嵌入到所有浏览器中。相反,它是由作者构建的自定义函数。

建议您最好使用页面上的联系表单向作者发送电子邮件,或钻取JavaScript文件,找出不支持的内容。

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 
1

在您使用 'parseQuerySTring' 不会回来了在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等