【问题标题】:What is best way to pass data from one call to another in this example?在此示例中,将数据从一个调用传递到另一个调用的最佳方法是什么?
【发布时间】:2018-11-22 16:47:37
【问题描述】:

这当然只是一个模型,但你会得到一个想法。

这是第一次通话:

function getData () {
  $.ajax{( 
     type:'GET',
     url: url,
     success: function (res) {
        // logic 
        // 'res.secret' property value that needs to be passed
        }
    )}
}

现在,这获得了一组数据,我需要在稍后使用POST 方法进行另一个调用。我们就叫它res.secret吧。

所以,下一个电话:

function postData () {
  $.ajax{( 
     type:'POST',
     url: url + res.secret,
     success: function (res) {
        //logic
        }
    )}
}

url 属性中将res.secret 传递给postData() 的最佳方式是什么?我可以将它保存为 html 为 data-*,但不要认为这是最好的方法。

另外,请注意postData()getData() 位于不同的.js 文件中。

【问题讨论】:

  • postData() 在哪里调用?将res.secret 保存在data 属性中对我来说是一个不错的解决方案。
  • 但是@RoryMcCrossan,在检查时几乎每个人都可以轻松访问它吗?
  • 是的。但不管你是否把它放在 DOM 中。任何 AJAX 请求的数据都可以在控制台中看到。
  • 您可以定义一个商店对象(在应用程序中全局)并从任何地方访问它
  • 谢谢@RoryMcCrossan,你是对的。

标签: javascript jquery html ajax javascript-objects


【解决方案1】:

这是使用 Promise 的理想案例。这是我在 ES6 中使用 async/await 纠正它的方法

(async () => {

    // result1 awaits for GET request to be resolved
    var result1 = await fetch(url);
    // then you pass your 'secret' from result1 to your next POST call
    var result2 = await fetch(`${url}${result1.secret}`, {method: 'post'});

})();;

【讨论】:

  • 这是假设在 getData() 完成后立即调用 postData() - 考虑到 OP 的示例情况,情况似乎并非如此。
  • 我现在明白了,以为您希望它们按顺序发生。在这种情况下,您可以将其以某种状态存储在某处
【解决方案2】:

我老了,不爱承诺,我就这样嵌套它;将第一个成功的结果作为参数传递给第二个:

function getData () {
   $.ajax{( 
     type:'GET',
     url: url,
     success: function (res) {
        postData(res.secret);
     }
   )}
}

function postData (theSecret) {
  $.ajax{( 
    type:'POST',
    url: url + theSecret,
    success: function (res) {
      //logic
    }
  )}
}

这会导致顺序和条件执行。

【讨论】:

  • 不能,调用在不同的文件中。
  • @stormec56 我错过了那部分,但只要它们在同一个命名空间中就没有关系。
  • @stormec56 好的,我明白了。我正在打电话,但如果我记得,我会在我回去工作时输入一些内容。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-14
  • 2018-09-11
  • 1970-01-01
  • 2017-07-16
相关资源
最近更新 更多