我正在构建一个在线商店作为练习的一部分,当我尝试访问当前URL的参数时,我遇到了问题。我的JavaScript代码是:
var link = getQueryVariable("q");
var minPrice = 0;
var maxPrice = 500;
function getQueryVariable(variable)
{
var query = window.location.search.substring(1);
var vars = query.split("&");
for (var i=0;i<vars.length;i++) {
var pair = vars[i].split("=");
if(pair[0] == variable){
return pair[1];
}
}
return(false);
}
function setPrices(callback){
$.get("getPriceBounds.php?q=" + link, function(data){
var results = JSON.parse(data);
minPrice = results["min"];
maxPrice = results["max"];
callback();
},"text/javascript");
}
我是否以错误的方式使用window.location,或者有其他方法可以在不停止执行的情况下访问URL?
谢谢
答案 0 :(得分:1)
function getParameterByName(name) {
name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
results = regex.exec(location.search);
return results === null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
}
请改用它。如果您在页面 http://example.org/index.html?q=300 并执行:
var q = getParameterByName("q");
console.log(q);
然后将在您的控制台中打印300。
答案 1 :(得分:0)
使用window.location.search应该可以正常工作。
您可以尝试使用以下替代方法来获取查询参数,以防代码中存在不正确的内容。
var q = 'myParam';
var getParams = function(url) {
return (window.location.search || url).slice(1).split('&')
.reduce(function(a, b) {
b = b.split('=');
a[b[0]] = b[1];
return a;
}, {});
}
getParams(); //{}
getParams('?test=7&more=test'); //{test:7, more:'test'}
&#13;
注意:上面的代码不会在嵌入式代码片段运行器中运行,因为它没有窗口对象。