Я изучаю, как правильно передать несколько значений для одного и того же имени параметра в запросе GET.
Я видел такие URL-адреса:
http://server/action?id=a&id=b
И я видел такие URL-адреса:
http://server/action?id=a,b
Я понимаю, что первое правильно, но я не могу найти никакой ссылки для этого. Я просмотрел спецификацию http, но ничего не мог понять о том, как должна быть составлена часть запроса "URL-адрес".
Мне не нужен ответ, в котором говорится, что "все в порядке" - если я создаю веб-сервис, я хочу знать, какой из этих методов является стандартным, чтобы люди, использующие мой веб-сервис, знали, как передавать несколько параметров для то же имя.
Итак, может кто-нибудь указать мне на официальный источник ссылки, чтобы подтвердить, какой вариант правильный?
Ответ 1
Действительно, нет определенного стандарта. Чтобы поддержать эту информацию, посмотрите на wikipedia в главе Query String. Существует следующий комментарий:
Пока нет окончательного стандарта, большинство веб-фреймворков позволяют несколько значений, которые должны быть связаны с одним полем. [3] [4]
Кроме того, когда вы смотрите RFC 3986, в разделе 3.4 Query, определение параметров с несколькими значениями отсутствует.
Большинство приложений используют первый вариант, который вы указали: http://server/action?id=a&id=b
. Чтобы поддержать эту информацию, ознакомьтесь с этой fooobar.com/questions/14693/... и этой
Ответ 2
Я бы предложил посмотреть, как браузеры обрабатывают формы по умолчанию. Например, посмотрите на элемент формы <select multiple>
и как он обрабатывает несколько значений из этого примера в w3schools.
<form action="/action_page.php">
<select name="cars" multiple>
<option value="volvo">Volvo</option>
<option value="saab">Saab</option>
<option value="opel">Opel</option>
<option value="audi">Audi</option>
</select>
<input type="submit">
</form>
Для использования PHP:
<select name="cars[]" multiple>
Живой пример сверху на w3schools.com
Сверху, если вы нажмете "saab, opel" и нажмете "отправить", будет получен результат cars = saab & cars = opel. Затем в зависимости от фонового сервера, параметр машина должна натолкнуться как массив, который можно дополнительно обработать.
Надеюсь, что это поможет любому, кто ищет более "стандартный" способ решения этой проблемы.
Ответ 3
var v1 = getParameterByName('resultTerm1');
var v2 = getparamNameMultiValues('resultTerm2');
function getParameterByName(name, url) {
if (!url) url = window.location.href;
name = name.replace(/[\[\]]/g, "\\$&");
var regex = new RegExp("[?&]" + name + "(=([^&#]*)|&|#|$)"),
results = regex.exec(url);
if (!results) return null;
if (!results[2]) return '';
return decodeURIComponent(results[2].replace(/\+/g, " "));
}
function getparamNameMultiValues(paramName){
var sURL = window.document.URL.toString();
var value =[];
if (sURL.indexOf("?") > 0){
var arrParams = sURL.split("?");
var arrURLParams = arrParams[1].split("&");
for (var i = 0; i<arrURLParams.length; i++){
var sParam = arrURLParams[i].split("=");
console.log(sParam);
if(sParam){
if(sParam[0] == paramName){
if(sParam.length>0){
value.push(sParam[1].trim());
}
}
}
}
}
return value.toString();
}