![](/img/trans.png)
[英]jQuery $.get/$.ajax passes HTTP status code 200 instead of expected status code of 201 or 202
[英]How do i get HTTP status code 200 instead of 202 from an ajax call
下面的代码总是收到一个 HTTP '202 Accepted' 状态码:
当我使用 postman 尝试相同的 API 时,我得到 200 OK”:
function ExportStatus() {
function ExportStatusAjax() {
$.ajax({
type: "GET",
url: "https://api.powerbi.com/v1.0/myorg/groups/" + groupId + "/reports/" + reportId + "/exports/" + exportId + "",
headers: {
"Authorization": "Bearer " + accessToken
},
success: function(data, textStatus, jqXHR) {
if (jqXHR.status == 200) {
GetExportFile()
} else {
ExportStatusAjax()
}
},
error: function(err) {
alert(error)
}
});
}
ExportStatusAjax()
}
你有一个永远不会结束的递归。 ExportStatusAjax() 至少在 2 个地方调用自己。 完全从您的代码中删除它。 如果没有 400x 或 500x,请不要太在意状态码。 一旦它恢复成功,您就可以继续。
我不熟悉 Power BI,所以我不能肯定地说,但从你的代码和 API 状态代码来看,这看起来像是一个异步 API 的情况。 这意味着,客户端提交请求并返回响应(这是一个 200,又名OK
),而不是 HTTP 中的传统 model,客户端提交一个 Z293C9EA246FF9785DC6F62A6 的占位符,告诉您请求和 86真正的反应还没有准备好。
202
被称为已Accepted
,我相信在这种情况下,它被用来表示您的请求已被接受到队列中。 这个想法是,如果你继续重试,最终它会完成并且你会得到真正的响应,它带有状态码200
。 报告、分析或其他类型的计算成本高昂的工作负载通常遵循这种模式。
这种方法是一种常见的模式。 如果这实际上是这里发生的事情,那么您的代码可能是正确的,并且看到响应在202
和200
之间翻转是正常的。
话虽如此,您的方法是不断地锤击服务器。 一旦它返回202
,它就会立即重试,这会增加远程系统的负载,理论上这实际上可能会减慢它的速度。
我建议放置一个计时器来延迟重试,可能每 3 秒或 5 秒左右。 setTimeout
function 可以帮助您。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.