Itunes Search API $ http jsonp get - избавьтесь от кодировки URL

0

я делаю вызов $ http.jsonp в угловой зависимости от Apple iTunes Search API для извлечения данных о песнях от конкретного исполнителя.

Нормальный запрос на получение конечной точки будет

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

Я бы очень признателен вам за вашу помощь здесь. Привет, Бен

Теги:
xmlhttprequest
itunes-search-api

1 ответ

0
Лучший ответ

Я предлагаю два возможных решения.

Как я вижу, проблема связана с Angular $ httpParamSerializer, который автоматически кодирует параметры URL.

Первое решение состоит в том, чтобы вообще не использовать ключ params и добавлять параметры URL вручную к URL-адресу, например:

$http.jsonp("http://itunes.apple.com/search?callback=JSON_CALLBACK&term=madonna+ghosttown");

Второе решение может заключаться в переопределении стандартного $ httpParamSerializer, который используется Angular $ http (см. Документацию API http http, раздел "Использование", ключ конфигурации "paramsSerializer"). A (чрезмерно упрощенным) примером будет следующий код, который вообще не кодирует параметры:

$http.jsonp("http://itunes.apple.com/search", {
  params: {
    "callback": "JSON_CALLBACK",
     "term": "madonna+ghosttown"
  },
  paramsSerializer: function(param) {
    return param;
  }
});

Ещё вопросы

Сообщество Overcoder
Наверх
Меню