基本上,我写了这段代码:
var paramStr = '';
for (var n in params) {
paramStr += '&' + n + '=' + params[n];
}
xhr.open(method, url + '?' + paramStr);
我是否需要移除第一个&符号,还是可以保留原样,没有副作用?
答案 0 :(得分:4)
你可以保持原样。
www.something.com?&something=something_else
是有效的网址
但是我会这样做看起来是正确的是添加一个虚拟参数:
var paramStr = '?dummy'; //or any other value
for (var n in params) {
paramStr += '&' + n + '=' + params[n];
}
xhr.open(method, url + paramStr);
或@slobodan的解决方案:
var paramStr = '?';
for (var n in params) {
paramStr += n + '=' + params[n] + '&';
// because you can have a `&` at the end
}
xhr.open(method, url + paramStr);
答案 1 :(得分:3)
先前的&符号应该没有问题。但是,在这种情况下,我喜欢将值推送到数组并在之后加入它们,然后您不必担心它:
var paramArr = [];
for (var n in params) {
paramArr.push(n + '=' + params[n]);
}
xhr.open(method, url + '?' + paramArr.join("&"));
答案 2 :(得分:2)
你可以离开。但您可以非常简单地删除它:paramStr.substr(1)
您可能需要的是/
之后的.com
。也许不是......
修改强>
它不是没有/
的“有效”网址,但所有浏览器(包括XHR类)都会自动为您修复。
答案 3 :(得分:1)
您不应该包含主要的&符号,除非您知道它们已经是URI编码,否则您也不应该将原始参数连接在一起:
var paramList = [];
for (var n in params) {
paramList.push(encodeURIComponent(n) + '=' + encodeURIComponent(params[n]));
}
var paramStr = paramList.join('&');
xhr.open(method, url + '?' + paramStr);
[更好的是,为自己省去了一大堆麻烦,只需使用jQuery就可以为你正确地跨浏览器完成所有这些工作]。
答案 4 :(得分:0)
这样做,它更干净......
var paramStr = '';
for (var n in params) {
var param = n + '=' + params[n];
paramStr += paramStr == '' ? param : '&' + param
}
xhr.open(method, url + '?' + paramStr);
修改强>
你不能这么做吗?params.join('&')
可能吗?什么是数据结构?
答案 5 :(得分:0)
离开它是好的,但在下面修改的代码中找不到会阻止在第一个元素之前写分隔符。
var paramStr = '';
var count=0;
for (var n in params) {
paramStr += (count>0?'&':'') + n + '=' + params[n];
count++;
}
xhr.open(method, url + '?' + paramStr);