基本上,我写了这段代码:
var paramStr = '';
for (var n in params) {
paramStr += '&' + n + '=' + params[n];
}
xhr.open(method, url + '?' + paramStr);
我需要删除第一个&符号还是可以保持原样而没有副作用?
基本上,我写了这段代码:
var paramStr = '';
for (var n in params) {
paramStr += '&' + n + '=' + params[n];
}
xhr.open(method, url + '?' + paramStr);
我需要删除第一个&符号还是可以保持原样而没有副作用?
您可以保持原样。
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);
前面的 & 号应该没有问题。但是,在这种情况下,我喜欢将值推送到数组中并在之后加入它们,那么您不必担心:
var paramArr = [];
for (var n in params) {
paramArr.push(n + '=' + params[n]);
}
xhr.open(method, url + '?' + paramArr.join("&"));
工作演示:http: //jsfiddle.net/rq7bA/
你可以离开那个。但是您可以非常简单地删除它:paramStr.substr(1)
您可能需要的是/
after .com
。也许不吧...
编辑
它不是没有 的“有效” URL /
,但所有浏览器(包括 XHR 类)都会自动为您修复。
您不应包含前导 & 符号,也不应将原始参数连接在一起,除非您知道它们已经经过 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,它可以为您正确地跨浏览器完成所有这些工作]。
改为这样做,它更清洁......
var paramStr = '';
for (var n in params) {
var param = n + '=' + params[n];
paramStr += paramStr == '' ? param : '&' + param
}
xhr.open(method, url + '?' + paramStr);
编辑
你就不能吗?
params.join('&')
那可能吗?数据结构是什么样的?
保留它是可以的,但是在下面找到修改的代码,这将防止在第一个元素之前写入分隔符。
var paramStr = '';
var count=0;
for (var n in params) {
paramStr += (count>0?'&':'') + n + '=' + params[n];
count++;
}
xhr.open(method, url + '?' + paramStr);