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



我正在做一个$http。在angular中调用jsonp调用Apple的iTunes Search API来检索特定艺术家的歌曲数据。

对端点的正常get请求应该是

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

看到回调是由$http引入的。Jsonp,它会正常工作。问题是,调用对url进行编码并将'+'替换为'%2B'。这会破坏Api并返回一个空数组。

调用将看起来像后面的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,它会自动编码URL参数。

第一个解决方案是根本不使用params键,并手动将URL参数附加到URL,如下所示:
$http.jsonp("http://itunes.apple.com/search?callback=JSON_CALLBACK&term=madonna+ghosttown");
第二个解决方案可以覆盖Angular的$http使用的默认$httpParamSerializer(参见$http API文档,"用法"一章,配置键"paramsSerializer")。一个(过于简单的)示例是下面的代码,它根本不编码参数:
$http.jsonp("http://itunes.apple.com/search", {
  params: {
    "callback": "JSON_CALLBACK",
     "term": "madonna+ghosttown"
  },
  paramsSerializer: function(param) {
    return param;
  }
});

相关内容

  • 没有找到相关文章