[英]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.