Itunes 搜索 API $http jsonp get - 去掉 url 编码

Itunes Search API $http jsonp get - get rid of url encoding

我正在 angular 中针对 Apple 的 iTunes 搜索 API 进行 $http.jsonp 调用,以检索有关特定艺术家歌曲的数据。

对端点的正常获取请求是

https://itunes.apple.com/search?callback=angular.callbacks._0&term=madonna+ghosttown

看到回调是由 $http.jsonp 引入的,它会正常工作。问题是,调用对 url 进行编码并将“+”替换为“%2B”。这打破了 Api 和 returns 一个空数组。

调用将类似于以下 then:

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

非常感谢您的帮助。 干杯, 本

我提出两种可能的解决方案。

在我看来,问题源于 Angular 的 $httpParamSerializer which automatically encodes URL 参数。

第一个解决方案 是完全不使用 params 键并手动将 URL 参数附加到 URL,例如这个:

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

第二种解决方案 可能是覆盖 Angular 的 $http 使用的默认 $httpParamSerializer(参见 $http API 文档,章节 "Usage",配置键 "paramsSerializer")。一个(过于简单的)示例是以下代码,它根本不对参数进行编码:

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