【发布时间】:2019-03-07 17:55:46
【问题描述】:
我正在根据是否选中复选框在 Javascript 中构造一个查询字符串。
复选框中的一些选项是
- “年度”
- “草”
- “灌木(常绿)”
- “灌木(落叶)”
我在网上找到了一个更新url参数的函数:
function updateUrlParameter(uri, key, value) {
value = value.replace(/\s/g, "%20");
var i = uri.indexOf('#');
var hash = i === -1 ? '' : uri.substr(i);
uri = i === -1 ? uri : uri.substr(0, i);
var re = new RegExp("([?&])" + key + "=.*?(&|$)", "i");
var separator = uri.indexOf('?') !== -1 ? "&" : "?";
if (!value) {
// remove key-value pair if value is empty
uri = uri.replace(new RegExp("([&]?)" + key + "=.*?(&|$)", "i"), '');
if (uri.slice(-1) === '?') {
uri = uri.slice(0, -1);
}
} else {
console.log("value is " + value)
uri = uri + separator + key + "=" + value;
}
return uri + hash;
}
使用上面的函数,如果我从上到下勾选以上四个的复选框,我的查询字符串就变成了
?plantType=Annual&plantType=Grass&plantType=Shrub%20(Evergreen)&plantType=Shrub%20(Deciduous
为什么函数会忽略字符串中的最后一个 ')'?有解决办法吗?我想在查询字符串中保留括号,因为这将使查询数据库更容易。
我创建了一个函数来遍历输入复选框。如果它们被选中,则使用 updateUrlParameter 函数更新 URI。
function getQueryString() {
var inputsContainerChildren = $('#floatingDivForFilter').children();
var input = document.createElement('input')
var uri = '';
for (var i = 0; i < inputsContainerChildren.length; i++) {
var currChild = inputsContainerChildren[i].firstElementChild;
if (currChild) {
if (currChild.tagName === 'INPUT') {
if (currChild.checked) {
var id = currChild.id;
console.log(uri)
uri = updateUrlParameter(uri, currChild.name, currChild.value);
}
}
}
}
console.log(uri);
}
下面的照片显示了生成的 URL 的快照。我不知道为什么最后一个')'被砍掉了。 url photo
【问题讨论】:
-
我建议不要使用从查询字符串中直接传入的值来查询数据库。这是为 SQL 注入敞开心扉的好方法。
-
这似乎有点像重新发明轮子,因为使用 method=GET 提交表单几乎可以为您完成所有这些工作。
-
你在这里把事情复杂化了,1你正在使用一个你不理解的功能来做一些相当简单的事情
-
问题不在这个函数上。该函数按预期工作:jsfiddle.net/7d3ofu5w - 问题必须出在调用此函数的代码或 HTML 标记或使用结果的代码中。
-
您可以发minimal reproducible example吗?我们或许可以帮助您。
标签: javascript string url