You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:03:30