3

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

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

我需要删除第一个&符号还是可以保持原样而没有副作用?

4

6 回答 6

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);
于 2011-05-04T13:20:24.553 回答
3

前面的 & 号应该没有问题。但是,在这种情况下,我喜欢将值推送到数组中并在之后加入它们,那么您不必担心:

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

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

于 2011-05-04T13:22:22.333 回答
2

你可以离开那个。但是您可以非常简单地删除它:paramStr.substr(1)

您可能需要的是/after .com。也许不吧...

编辑
它不是没有 的“有效” URL /,但所有浏览器(包括 XHR 类)都会自动为您修复。

于 2011-05-04T13:20:37.987 回答
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,它可以为您正确地跨浏览器完成所有这些工作]。

于 2011-05-04T13:25:31.657 回答
0

改为这样做,它更清洁......

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

编辑

你就不能吗?

params.join('&')

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

于 2011-05-04T13:21:36.770 回答
0

保留它是可以的,但是在下面找到修改的代码,这将防止在第一个元素之前写入分隔符。

var paramStr = '';
var count=0;
for (var n in params) {
    paramStr += (count>0?'&':'') + n + '=' + params[n];
    count++;
}
xhr.open(method, url + '?' + paramStr);
于 2011-05-04T13:25:30.133 回答