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

标签 javascript jquery ajax

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

相关文章:

php - 使用ajax和表单数据发送base64图像

javascript - 使用 Ajax 选择选项时的事件

php - 如何使用 php 和 mysql Ajax、Jsone 显示公司详细信息的自动显示详细信息

javascript - 谷歌地图地理编码

javascript - 对 jQuery 数据表中所有选定的行求和

javascript - Nanoscroller 显示无法读取未定义的属性 'style' 为什么?

javascript - 与多个 Select2 绑定(bind)的 Knockout.js

javascript - jQuery 选项卡 : Disable window location hash

Javascript 使 BBcode 正则表达式变得不贪婪

jquery - 如果 URL 包含 6 位数字,则将该值 append 到类中