繁体   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