javascript - 如何链接ajax请求?

标签 javascript jquery asynchronous

我必须与强制我链接请求的远程 API 进行交互。那是异步模式下的回调 hell :

// pseudocode: ajax(request_object, callback)
ajax(a, function() {
  ajax(b(a.somedata), function() {
    ajax(c(b.somedata), function() {
      c.finish()
    }
  }) 
})

在同步模式下会更具可读性:

sjax(a)
sjax(b(a.somedata))
sjax(c(b.somedata))
c.finish()

但是 Sjax 是邪恶的 :) 我如何以nice 不那么邪恶和可读的方式做到这一点?

最佳答案

你可以有一个函数,它被传递一个整数来说明请求在哪一步,然后使用一个 switch 语句来确定下一步需要做什么请求:

function ajaxQueue(step) {
  switch(step) {
    case 0: $.ajax({
              type: "GET",
              url: "/some/service",
              complete: function() { ajaxQueue(1); } 
    }); break;
    case 1: $.ajax({
              type: "GET",
              url: "/some/service",
              complete: function() { ajaxQueue(2); }
            }); break;
    case 2: $.ajax({
              type: "GET",
              url: "/some/service",
              complete: function() { alert('Done!'); }
            }); break;
  }
}

ajaxQueue(0);

希望对您有所帮助!

关于javascript - 如何链接ajax请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/995529/

相关文章:

javascript - 尝试让机器人输入一个列表,中间有延迟

javascript - 使用 LocalStorage 保存和加载购物车

javascript - 如何将字符串转换为对象表示法

javascript - 未知的 AngularJS 错误(我是初学者)

jQuery - 选择与 'clicked' 元素相同类别的元素

performance - 设置 UIImageView 的图像属性会导致严重滞后

javascript - 使用 webpack 的多个包

javascript - 调用新页面Javascript后滚动检测不起作用

c# - 使用await时读取文本文件和代码跳转

jquery - Python、Postgres 和 Ajax/Jquery 使用数据库值实时更新页面