我从链接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>
答案 0 :(得分:6)
您链接的页面作者创建的parseQueryString()
函数显然会调用一些不在Chrome上运行的JavaScript代码。
这并不意味着Chrome一般不支持QueryStrings。您似乎假设parseQueryString()
函数本质上是全局函数,并且本质上内置于所有浏览器中。相反,它是由作者构建的自定义函数。
建议您使用页面上的联系表单给作者发送电子邮件,或者深入查看JavaScript文件,找出不支持的内容。
答案 1 :(得分: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";
答案 2 :(得分: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等。
答案 3 :(得分: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