簡體   English   中英

我如何從 ajax 調用中獲取 HTTP 狀態代碼 200 而不是 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 報告、分析或其他類型的計算成本高昂的工作負載通常遵循這種模式。

這種方法是一種常見的模式。 如果這實際上是這里發生的事情,那么您的代碼可能是正確的,並且看到響應在202200之間翻轉是正常的。

話雖如此,您的方法是不斷地錘擊服務器。 一旦它返回202 ,它就會立即重試,這會增加遠程系統的負載,理論上這實際上可能會減慢它的速度。

我建議放置一個計時器來延遲重試,可能每 3 秒或 5 秒左右。 setTimeout function 可以幫助您。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM