【问题标题】:Itunes Search API $http jsonp get - get rid of url encodingItunes Search API $http jsonp get - 摆脱 url 编码
【发布时间】:2015-09-19 23:18:10
【问题描述】:

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

对端点的正常获取请求将是

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

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

【问题讨论】:

    标签: angularjs xmlhttprequest itunes-search-api


    【解决方案1】:

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

    在我看来,问题源于 Angular 的 $httpParamSerializer 其中 automatically encodes 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;
      }
    });
    

    【讨论】:

      猜你喜欢
      • 2013-06-18
      • 2019-01-27
      • 2022-01-19
      • 2021-11-09
      • 1970-01-01
      • 2021-07-10
      • 2017-10-25
      • 2021-02-12
      • 2019-07-05
      相关资源
      最近更新 更多