Могу ли я сделать это: mysite.com?&var1=value1&var2=value2 - PullRequest
3 голосов
/ 04 мая 2011

В основном я написал этот код:

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

Нужно ли удалять первый амперсанд или я могу оставить его как есть, без побочных эффектов?

Ответы [ 6 ]

4 голосов
/ 04 мая 2011

Вы можете оставить все как есть.

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);
3 голосов
/ 04 мая 2011

Не должно быть проблем с предыдущим амперсандом. Однако в такой ситуации мне нравится помещать значения в массив и впоследствии объединять их, тогда вам не нужно об этом беспокоиться:

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

Рабочая демоверсия: http://jsfiddle.net/rq7bA/

2 голосов
/ 04 мая 2011

Вы можете оставить это. Но вы можете удалить его очень просто: paramStr.substr(1)

Возможно, вам понадобится / после .com. Может быть, нет ...

редактировать
Это не «действительный» URL без /, но все браузеры (включая класс XHR) исправят это автоматически.

1 голос
/ 04 мая 2011

Не следует включать ведущий амперсанд, а также не следует объединять необработанные параметры вместе, если вы не знаете, что они уже закодированы в 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, который может сделать все это для вас правильно кросс-браузер].

0 голосов
/ 04 мая 2011

Оставив все в порядке, но найдите ниже модифицированный код, который будет препятствовать написанию разделителей перед первым элементом.

var paramStr = '';
var count=0;
for (var n in params) {
    paramStr += (count>0?'&':'') + n + '=' + params[n];
    count++;
}
xhr.open(method, url + '?' + paramStr);
0 голосов
/ 04 мая 2011

сделайте это вместо этого, это намного чище ...

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

EDIT

Не могли бы вы просто сделать?

params.join('&')

это возможно? как выглядит структура данных?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...