gpt4 book ai didi

javascript - 使用 .done 进行嵌套 AJAX 调用

转载 作者:行者123 更新时间:2023-11-28 01:17:52 24 4
gpt4 key购买 nike

我对 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com