我有一種感覺,我只是看着這個錯誤,但我想通過Angular的$ http.get()方法(特別是包含逗號的參數)傳遞URL查詢參數的正確方式得到反饋。如何使用AngularJS正確發送包含逗號的網址參數?
比方說,我有以下數據,在GET請求中使用的URL參數:
var params = {
filter : [
"My filter",
"My other filter",
"A filter, that contains, some commas"
],
sort : [
"ascending"
]
};
現在,我這種結構轉換的一些參數可以被送入$http.get
:
var urlParams = {};
angular.forEach(params, function(value, name) {
urlParams[name] = "";
for (var i = 0; i < value.length; i++) {
urlParams[name] += value[i];
if (i < value.length - 1) {
urlParams[name] += ","
}
}
}
在這一點上,urlParams
看起來是這樣的:
{
filter : "My filter,My other filter,A filter, that contains, some commas",
sort : "ascending"
}
現在,這不是我想要的,因爲第三個filter
參數現在變成了三個單獨的參數。 (我正在使用的API不允許以任何其他方式傳遞參數的多個值:「?param = value1,value2,value3」)所以,我需要做的是URI首先對這些值進行編碼, ?所以,我想補充一個encodeURIComponent()
上述程序是這樣的:
urlParams[name] += encodeURIComponent(value[i]);
這給了我一個參數對象,看起來像這樣:
{
filter : "My%20filter,My%20other%20filter,A%20filter%2C%20that%20contains%2C%20some%20commas",
sort : "ascending"
}
現在,我提出一個要求:
var config = {
params : urlParams
};
$http.get("/foo", config).then(function(response){
console.log(response);
});
...這是行不通的,因爲Angular也會編碼URL參數,所以請求最終看起來像這樣:
GET "/foo?filter=My%2520filter,My%2520other%2520filter,A%2520filter%2C%20that%20contains%2C%20some%20commas&sort=ascending"
正如你所看到的參數被編碼了兩次(%符號被編碼爲%25),這當然是行不通的。
顯然,我做錯了。但是,正確的方法是什麼?或者,我是否需要讓API開發人員接受這樣的URL參數?
GET "/foo?filter=My+filter,+with+a+comma&filter=Another+filter"
其中多個參數值分開陳述,而不是用逗號分隔?
感謝您幫助我認爲它通過。如果有最佳答案,我想它一定是這個,因爲那是我最終要求的 - API開發者做一些調整。 –