基本上,我写了以下代码:
var paramStr = '';
for (var n in params) {
paramStr += '&' + n + '=' + params[n];
}
xhr.open(method, url + '?' + paramStr);
我是否需要删除第一个&号,或者我可以保留它,没有副作用?
你可以保持原样。
www.something.com?&something=something_else
是一个有效的url
但是我要做的是添加一个虚拟参数:
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)
您可能需要的是.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);
保留它是可以的,但发现下面修改的代码将阻止在第一个元素之前写入分隔符。
var paramStr = '';
var count=0;
for (var n in params) {
paramStr += (count>0?'&':'') + n + '=' + params[n];
count++;
}
xhr.open(method, url + '?' + paramStr);
这样做,它更简洁…
var paramStr = '';
for (var n in params) {
var param = n + '=' + params[n];
paramStr += paramStr == '' ? param : '&' + param
}
xhr.open(method, url + '?' + paramStr);
编辑
你就不能做吗?
params.join('&')
这可能吗?数据结构是什么样的?