我对 AJAX 相当陌生,但正在开发一个需要 ajax 调用来验证特定值的项目,然后在第一个返回预期值的情况下进行另一个 ajax 调用。我正在尝试实现 .done/.fail 模型,但无法找到一种方法来防止两个调用同时发生,而不是在第一个调用完成并成功后发生。
以下代码将调用 ajaxCall 函数两次,但是同时调用而不是连续调用。我研究了大量的代码,包括 Nested AJAX Calls , jQuery getting rid of nested ajax functions ,和$.when.done callback isn't working ,但似乎没有一个适合我的确切场景,或者也许我只是不理解代码。无论哪种方式,我都无法找到解决方案,非常感谢任何帮助!
var xReturn = ajaxCall("1");
xReturn.done(function(msg){
console.log("callback "+msg+" successful");
// if successful, place second call
if(parseInt(msg)==1)
xReturn = ajaxCall("2");
});
function ajaxCall(mop){
return $.ajax({
url: "getItem.php",
type: "POST",
data: {code: '<?php echo $code; ?> ', op:mop}
});
}
看起来 promise 可能是可行的方法,但我无法理解如何在这种情况下使用它们。预先感谢您提供正确方向的任何指示。
更新:
我进行了一系列测试,结果各不相同。对于昨晚的最后测试,我直接在 ajaxCall("2");
之后放置了另一个 console.log(msg);
,每次生成的 msg 始终为“1” ,让我相信电话没有正常进行。这个结果告诉我,xReturn.done(function(msg)...
只被调用一次,但我认为它会在每次 ajax 调用时被调用。
有了这些新信息,我今晚将进行额外的测试并报告。
谢谢
最佳答案
您需要将 .done()
方法绑定(bind)到每个 promise 。 xReturn.done()
将一个函数绑定(bind)到该 Promise。
当您执行xReturn = ajaxCall("2");
时,您替换 xReturn
为不同的对象。该对象没有绑定(bind).done()
方法。
您需要将 .done()
绑定(bind)到每个 Promise,这不会自动发生。
var xReturn = ajaxCall("1");
// This binds the callback to this *specific* promise
xReturn.done(ajaxDone);
function ajaxCall(mop){
return $.ajax({
url: "getItem.php",
type: "POST",
data: {code: '<?php echo $code; ?> ', op:mop}
});
}
function ajaxDone(msg){
console.log("callback "+msg+" successful");
// if successful, place second call
if(parseInt(msg)==1){
xReturn = ajaxCall("2");
// Bind a callback to this *new* object
xReturn.done(ajaxDone);
}
}
关于javascript - 使用 .done 进行嵌套 AJAX 调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23622311/