我有一个与此事件相关的按钮:
$("#getSensorsObs").click(function (e) {
e.preventDefault();
postCallOne();
postCallTwo();
});
当第一个呼叫成功完成postCallOne时,我希望
postCallTwo
触发。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,谁能帮我?
非常感谢。
最佳答案
您需要这样称呼它:
$("#button").click(function (e) {
e.preventDefault();
postCallOne().then(function() {postCallTwo()};);
});
您编写方式的问题是,在从postCallOne解析延迟之前,将放置对postCallTwo的调用。您需要等待postCallOne解决,然后在postCallOne成功的情况下将postCallTwo链接起来。这就是延期存在的原因。
关于javascript - 在jQuery异步POST调用中使用延迟,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38741335/