我可以这样做吗:mysite.com?&var1=value1&var2=value2



基本上,我写了以下代码:

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('&')

这可能吗?数据结构是什么样的?

最新更新