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 请求