【问题标题】:Best approach to making sequential POST requests in Javascript在 Javascript 中发出顺序 POST 请求的最佳方法
【发布时间】:2020-02-27 13:12:46
【问题描述】:

所以我有一个数组,其中包含需要作为有效负载的一部分发送的数据,以用于需要发出的 POST 请求。现在,这些需要按顺序进行,因为我需要显示特定的有效负载,然后是结果(结果是使用有效负载发出 POST 请求后返回的响应),然后是下一个有效负载,然后是下一个结果和等等,在我的页面上。我只是想知道实现这一目标的最佳方法是什么。所以这就是我目前的处理方式:

for (var i = 0; i < quotesList.length; i++) {
var response = $.ajax({
      type: "POST",
      url: url,
      data: JSON.stringify(quotesList[i]),
      success: add_to_page,
      },
      timeout: 300000,
      error: function(){
            console.log("Some Error!")
        },
      contentType: "application/json"
})

显然,这里出现的问题是无法保证正确地获取该序列,而且我不太确定如何准确跟踪有效负载,因为尝试将其添加为成功的一部分函数只让我得到最后一个元素(大概是最后一个被触发的请求)

【问题讨论】:

  • 好吧,您只能发送 1 个发布请求并获取所有请求的所有数据,但不会显示全部数据,但您可以在用户执行某些操作时仅显示所需数据,这样您还将控制您的数据和用户操作。
  • 你可以使用递归来存档。
  • 尝试async: false 以及其他ajax 选项。
  • @KalpashreeV.Bal 我不需要它是同步的,我只需要它是顺序的。

标签: javascript jquery xmlhttprequest fetch-api


【解决方案1】:

你可以试试下面的方法。

let quotesListIndex = 0;
function sendAjaxCall() {
  if (quotesListIndex < quotesList.length) {
    var response = $.ajax({
      type: "POST",
      url: url,
      data: JSON.stringify(quotesList[quotesListIndex++]),
      success: function () {
        //... Add code here

        sendAjaxCall();     // Call the function again for next request      

      },
      timeout: 300000,
      error: function () {
        console.log("Some Error!")
      },
      contentType: "application/json"
    })
  } else {
    return;
  }
}

添加一个全局变量来跟踪索引。并递归调用函数。一旦索引达到数组大小,然后从函数返回。

【讨论】:

  • quotesList.length - 长度是一个属性,而不是一个方法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-09
  • 2020-09-30
  • 2017-09-12
  • 1970-01-01
相关资源
最近更新 更多