AngularJS V1.6使用JSONP请求出现$http.badjsonp错误求助
修复AngularJS服务获取外部API JSON响应的问题
嘿,我看了你的AngularJS服务代码,发现几个关键问题导致你没法正常获取API的JSON响应,咱们一步步来搞定:
主要问题分析
- 没有发起实际的HTTP请求:你的
getData函数只定义了URL和请求头,但完全没调用$http来发送请求,也没返回任何结果。Angular的$http方法返回Promise,这是你获取异步数据的核心。 - JSONP请求的用法不对:你的URL里带了
callback=JSON_CALLBACK,这是Angular JSONP请求的标识,但你没对应使用$http.jsonp方法,用普通GET会触发跨域问题(如果API不在同域的话)。 - 无效的请求头设置:
Accept头写的'...'是无效值,而且JSONP请求通常不需要设置Content-Type头——因为JSONP是通过动态创建script标签加载的,不是标准的POST/GET请求格式。
修复后的代码
angular.module('app').factory('appService', appService); appService.$inject = ['$http','$sce']; function appService($http, $sce) { return { getData: getData }; function getData() { // 用$sce.trustAsResourceUrl确保URL被Angular信任,避免请求被拦截 var URL = $sce.trustAsResourceUrl("https://www.westelm.com/services/catalog/v4/category/shop/new/all-new/index.json?callback=JSON_CALLBACK"); // JSONP请求只需设置有效的Accept头即可 var requestHeaders = { 'Accept': 'application/json' }; // 发起JSONP请求并返回Promise,让调用方可以处理异步结果 return $http.jsonp(URL, { headers: requestHeaders }) .then(function(response) { // 成功获取数据后返回响应体 return response.data; }) .catch(function(error) { // 捕获请求错误,方便调试和给用户反馈 console.error('获取数据失败:', error); throw error; // 把错误抛出去让调用方自行处理 }); } }
额外使用提示
在控制器里调用这个服务时,要通过Promise的.then来获取数据:
appService.getData().then(function(data) { console.log('获取到的数据:', data); // 在这里处理拿到的业务数据 });
内容的提问来源于stack exchange,提问作者Learner
相关产品推荐
相关产品推荐

