API поиска Itunes $http jsonp get - избавиться от кодировки URL
Я делаю вызов $http.jsonp под углом против API поиска Apple Apple, чтобы получить данные о песнях от конкретного исполнителя.
Обычный запрос get к конечной точке будет
https://itunes.apple.com/search?callback=angular.callbacks._0&term=madonna+ghosttown
Посмотрите, что обратный вызов введен $http.jsonp, и он будет работать правильно. Проблема в том, что вызов кодирует URL и заменяет "+" на "%2B". Это нарушает API и возвращает пустой массив.
Вызов будет выглядеть следующим образом:
https://itunes.apple.com/search?callback=angular.callbacks._0&term=madonna%2Bghosttown
Как я могу заставить $ http не заменять '+', который разделяет условия поиска? Следующий блок кода показывает мой звонок.
$http.jsonp("http://itunes.apple.com/search", {
params: {
"callback": "JSON_CALLBACK",
"term": "madonna+ghosttown"
}
}).success(function (data, status, headers, config) {
console.log(data);
}).error(function (data, status, headers, config) {
console.log(data);
});
Я был бы очень признателен за вашу помощь здесь. Ура, Бен
1 ответ
Я предлагаю два возможных решения.
На мой взгляд, проблема связана с $ httpParamSerializer от Angular, который автоматически кодирует параметры URL.
Первое решение состоит в том, чтобы не использовать params
введите ключ и добавьте параметры URL вручную, например, так:
$http.jsonp("http://itunes.apple.com/search?callback=JSON_CALLBACK&term=madonna+ghosttown");
Второе решение может заключаться в переопределении $ httpParamSerializer по умолчанию, который используется Angular $http (см. Документацию $http API, глава "Использование", ключ конфигурации "paramsSerializer"). Примером (чрезмерно упрощенным) будет следующий код, который вообще не кодирует параметры:
$http.jsonp("http://itunes.apple.com/search", {
params: {
"callback": "JSON_CALLBACK",
"term": "madonna+ghosttown"
},
paramsSerializer: function(param) {
return param;
}
});