Itunes Search API $ http jsonp get - 摆脱url编码

时间:2015-09-19 14:38:20

标签: angularjs xmlhttprequest itunes-search-api

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

对端点的正常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 个答案:

答案 0 :(得分:0)

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

正如我所看到的,问题源于Angular的$httpParamSerializer automatically encodes网址参数。

第一个解决方案是根本不使用params密钥并手动将URL参数附加到URL,如下所示:

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

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

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