2015-09-19 2 views
0

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

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

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

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

ответ

0

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

Как я вижу, проблема связана с Angular's $httpParamSerializer, которая содержит параметры URL-адреса automatically encodes.

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

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

второе решение может переопределить по умолчанию $ в httpParamSerializer, который используется URL-адресом 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; 
    } 
}); 
Смежные вопросы