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

时间:2011-05-04 13:18:08

标签: javascript url ampersand

基本上,我写了这段代码:

var paramStr = '';
for (var n in params) {
    paramStr += '&' + n + '=' + params[n];
}
xhr.open(method, url + '?' + paramStr);

我是否需要移除第一个&符号,还是可以保留原样,没有副作用?

6 个答案:

答案 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("&"));

工作演示:http://jsfiddle.net/rq7bA/

答案 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);