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;
}
});
我正在 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;
}
});