在GET请求中传递相同参数名称的多个值的正确方法

我正在寻找什么是正确的方式传递GET请求中相同的参数名称的多个值。

我已经看到这样的url:

http://server/action?id=a&id=b 

我也看到了这样的url:

 http://server/action?id=a,b 

我的理解是第一个是正确的,但我找不到任何参考。 我看了一下http规范,但看不到任何有关如何组成URL的“查询”部分。

我不想要一个答案,说:“要么罚款” – 如果我build立一个Web服务,我想知道哪些方法是标准的,以便使用我的Web服务的人知道如何传递多个参数为相同的名称。

那么,有人能指出我在一个官方的参考来源,以确认哪个选项是正确的?

的确,没有明确的标准。 要支持这些信息,请查看维基百科, 查询string一章。 有以下评论:

虽然没有明确的标准,但大多数Web框架允许将多个值与单个字段相关联。 [3] [4]

此外,当您查看RFC 3986的 3.4节“ 查询”时 ,没有定义具有多个值的参数。

大多数应用程序使用您显示的第一个选项: http://server/action?id=a&id=b 。 为了支持这些信息,看看这个Stackoverflow链接 ,以及关于ASP.NET应用程序的这个MSDN链接 ,它们使用相同的标准来为多个参数提供参数。

但是,由于您正在开发API,因此我build议您尽可能做到最简单,因为API的调用者在创build查询string时不会遇到太多麻烦。

  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(); }