【问题标题】:Using deferred in jquery asynch POST call在 jquery 异步 POST 调用中使用 deferred
【发布时间】:2016-08-03 10:43:34
【问题描述】:

我有这个事件的按钮:

$("#getSensorsObs").click(function (e) {
        e.preventDefault();
        postCallOne();
        postCallTwo();
    });

我希望postCallTwo 在 postCallOne 成功完成第一次通话后触发。

function postCallOne() {
  setWait();
  //do something

  return $.post(ADDRESS, {fieldONE : fieldOneVal })
    .done(function (data) {
        console.log("RESPONSE SUCCESS ");
        // do something

    }).error(function(x, t, m) {
            alert(x + ' ' + t + ' ' + m);
        }
    }).then(function (resp) {
        return $.Deferred(function(def){
        def.resolveWith({},[resp == 1,valueSelected]);
    }).promise();
});

这是第二个功能:

function postCallTwo() {
  setWait();
  //do something

  return $.post(ADDRESS2, {fieldONE : fieldOneVal })
    .done(function (data) {
        console.log("RESPONSE SUCCESS ");
        // do something

    }).error(function(x, t, m) {
            alert(x + ' ' + t + ' ' + m);
        }
    });
});

我试过了:

  $("#button").click(function (e) {
        e.preventDefault();
        postCallOne.then( function(){postCallTwo();});

    });

但是我已经返回 postCallOne.done 不是一个函数。

我不太了解 Deferred,谁能帮帮我?

非常感谢。

【问题讨论】:

  • postCallOne().done(postCallTwo); ?!

标签: javascript jquery post jquery-deferred deferred


【解决方案1】:

你需要这样称呼它:

$("#button").click(function (e) {
    e.preventDefault();
    postCallOne().then(function() {postCallTwo()};);

});

您编写的方式的问题是对 postCallTwo 的调用将在从 postCallOne 解决延迟之前放置。您需要等待 postCallOne 解决,然后将 postCallTwo 链接到 postCallOne 的成功。这就是延迟存在的原因。

【讨论】:

  • 但是我返回了 Uncaught TypeError: postCallOne.done is not a function
  • 我的错,请使用 .then 链接它:postCallOne.then(function() {postCallTwo()})
  • mmmm 现在我有 .then 不是函数
  • 又是我的错 postCallOne().then(function() { postCallTwo()}) .done 或 .then 不是问题。我忘了在 postCallOne 后附加调用括号
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多