JSONP 请求在 Angular 应用程序中给出 404

Posted

技术标签:

【中文标题】JSONP 请求在 Angular 应用程序中给出 404【英文标题】:JSONP request gives 404 in Angular app 【发布时间】:2014-07-27 04:19:15 【问题描述】:

我正在尝试通过 JSONP 请求从 API 获取一些数据,但每次都得到 404。我会假设我的 URL 是错误的,但我可以在 Chrome 中手动点击 URL 并获得所需的响应。我的$http.jsonp 请求总是出错,在错误回调中我的console.log 中显示404。

这是发出请求的代码:

$scope.fetchDefaultLabel = function () 
      // This code will eventually set the label to the site name when the endpoint field blurs.
      // Currently not working properly.
      if ($scope.endpoint) 
        var baseUrl = $scope.endpoint.split('/')[2];
        var siteNameUrl = 'http://' + baseUrl + '/api/sitename.json?callback=JSON_CALLBACK';
        console.log(siteNameUrl);
        $http.jsonp(siteNameUrl)
          .success(function(data, status, headers, config) 
            $scope.label = data;
          )
          .error(function(data, status, headers, config) 
            console.log('Data: ' + data);
            console.log('Status: ' + status);
            console.log('Headers: ' + headers);
            console.log('Config: ' + config);
          );
      
    ;

Chrome 开发工具的网络面板显示了一个 200 响应请求以及我期望的响应正文,但无论出于何种原因,这都没有到达 Angular。

【问题讨论】:

你已经看过了吗? ***.com/questions/19916362/… @klode 我已经看到了。可能是 API 不支持 JSONP 请求。这可能吗? 我也有同样的问题。 【参考方案1】:

在与一些后端开发人员交谈后,我使用的 API 似乎不支持 JSONP。这就是我在该请求中收到 404 的原因。

【讨论】:

这对于 Angular 来说处理这种错误确实是一种糟糕的方式。给出 404 令人困惑。它只是说,“嘿,脚本中没有可调用的有效函数”怎么样,我们都在愉快地确保响应对 jsonp 有效【参考方案2】:

您能否在 ajax 请求之前提供 window.console.log(siteNameUrl) 的确切内容并提供结果? 也许尝试一个 siteNameUrl.toString() 以防万一它是一个解析问题 您似乎没有请求完全相同的网址... 甚至尝试将您正在使用的 siteNameUrl 硬写为 siteNameUrl="www.someapi/api"

【讨论】:

我不确定是否可以公开 URL,但我确实尝试将值硬编码到变量中。它似乎也不是那样工作的。在这一点上,我相信 API 不支持 JSONP 请求。那可能吗?您是否必须有意为 API 添加 JSONP 支持? 是的,你需要一个不同的实现:[...]'请注意,要使 JSONP 工作,服务器必须知道如何回复 JSONP 格式的结果'en.wikipedia.org/wiki/JSONP

以上是关于JSONP 请求在 Angular 应用程序中给出 404的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Angular 中测试 JSONP HTTP 请求?

带有 HttpHeaders 的 Angular 5 JSONP 请求

Angular 1.6.3 不允许 1.5.8 中允许的 JSONP 请求

对 Python Bottle 的跨域 Angular JSONP 请求

Angular $http 服务/控制器到 JSONP

在 AngularJS 中设置 JSONP 回调函数