我如何从 ajax 调用中获取 HTTP 状态代码 200 而不是 202
How do i get HTTP status code 200 instead of 202 from an ajax call
以下代码总是收到 HTTP“202 已接受”状态代码:
当我使用邮递员尝试相同的 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,请不要太在意状态码。一旦 returns 成功,您就可以继续了。
我不熟悉 Power BI,所以我不能肯定地说,但是从你的代码和 API 状态代码来看,这看起来像是一个异步 API .这意味着,不同于 HTTP 中客户端提交请求并获得响应的传统模型(这是一个 200,a.k.a。OK
),客户端提交 HTTP 请求,然后response 是一个占位符,告诉你真正的响应还没有准备好。
202
被称为 Accepted
,我相信在这种情况下,它被用来表示您的请求已被接受到队列中。这个想法是,如果你继续重试,最终它会完成,你会得到真正的响应,它带有 200
的状态代码。报告、分析或其他类型的计算量大的工作负载通常遵循这种模式。
这种方法是一种常见的模式。如果这实际上是这里发生的事情,那么您的代码可能是正确的并且看到 202
和 200
之间的响应翻转是正常的。
话虽如此,您的方法是不断地攻击服务器。一旦返回 202
,它会立即重试,这会增加远程系统的负载,理论上这实际上可能会减慢它的速度。
我建议设置一个计时器来延迟重试,也许每 3 秒或 5 秒左右。 setTimeout
函数可以帮到你。
以下代码总是收到 HTTP“202 已接受”状态代码:
当我使用邮递员尝试相同的 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,请不要太在意状态码。一旦 returns 成功,您就可以继续了。
我不熟悉 Power BI,所以我不能肯定地说,但是从你的代码和 API 状态代码来看,这看起来像是一个异步 API .这意味着,不同于 HTTP 中客户端提交请求并获得响应的传统模型(这是一个 200,a.k.a。OK
),客户端提交 HTTP 请求,然后response 是一个占位符,告诉你真正的响应还没有准备好。
202
被称为 Accepted
,我相信在这种情况下,它被用来表示您的请求已被接受到队列中。这个想法是,如果你继续重试,最终它会完成,你会得到真正的响应,它带有 200
的状态代码。报告、分析或其他类型的计算量大的工作负载通常遵循这种模式。
这种方法是一种常见的模式。如果这实际上是这里发生的事情,那么您的代码可能是正确的并且看到 202
和 200
之间的响应翻转是正常的。
话虽如此,您的方法是不断地攻击服务器。一旦返回 202
,它会立即重试,这会增加远程系统的负载,理论上这实际上可能会减慢它的速度。
我建议设置一个计时器来延迟重试,也许每 3 秒或 5 秒左右。 setTimeout
函数可以帮到你。