在 jquery 异步 POST 调用中使用延迟
Using deferred in jquery asynch POST call
我有这个事件的按钮:
$("#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,谁能帮帮我?
非常感谢。
你需要这样称呼它:
$("#button").click(function (e) {
e.preventDefault();
postCallOne().then(function() {postCallTwo()};);
});
您所写方式的问题是对 postCallTwo 的调用将在从 postCallOne 解决延迟之前放置。您需要等待 postCallOne 解析,然后在 postCallOne 成功时链接 postCallTwo。这就是延迟存在的原因。
我有这个事件的按钮:
$("#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,谁能帮帮我?
非常感谢。
你需要这样称呼它:
$("#button").click(function (e) {
e.preventDefault();
postCallOne().then(function() {postCallTwo()};);
});
您所写方式的问题是对 postCallTwo 的调用将在从 postCallOne 解决延迟之前放置。您需要等待 postCallOne 解析,然后在 postCallOne 成功时链接 postCallTwo。这就是延迟存在的原因。