jquery - 连续使用 .done() 给出与 .then() / .done() 相同的结果

2023-12-04

编辑 - 请参阅底部的注释,了解为什么我不认为这是重复的问题

使用jquery 3.2.1和Bootstrap 3.3.7

我的应用程序的部分流程如下:

  1. 用户单击模式窗口内 ID 为的锚点#notifierModal

  2. 这使得第一个ajax请求它将写入数据库,存储用户所做选择的首选项(每个选择都是步骤 1 中的锚点 - 单击可打开/关闭首选项)。此 ajax 请求的响应是 JSON,其格式如下:

    {result: "success", message: "Notification preference has been updated"}

如果在进行数据库更新时出现错误,则 JSON 为 具有类似的结构,但会有{result: "error"}和适当的消息。

  1. A 第二个ajax请求更新模态的内容(#notifierModal)。在步骤 2 中更新数据库中的首选项之后,这可以有效地“刷新”模式中显示的数据。

  2. 步骤 2 的响应给出的结果(成功或错误消息)在内部更新#notifierModal.

我的问题 - 我已经使用以下 ajax 实现了上述内容:

// Step 1
$('#notifierModal .modal-body').on('click', '.toggle-notifier a', function(e) {
    e.preventDefault();

    // Step 2
    $.ajax({
        url: $(this).attr('href'),
        method: 'get'
    }).then(function(response2) {

        // Step 3
        $.ajax({
            url: '/notifier-modal',
            method: 'get'
        }).then(function(response3) {

            $('#notifierModal .modal-body').html(response3);
        }).done(function() {

            // Step 4
            if (response2.result == 'error') {
                $('#notifierModal .modal-body .outcome').html(response2.message); 
            }
            if (response2.result == 'success') {
                $('#notifierModal .modal-body .outcome').html(response2.message); 
            }
        });       
    }); 
});

但是,如果我替换两个实例.then() with .done()它的工作方式完全相同。

我试图确保第一个 ajax 请求(步骤 2)完成,然后再继续发出第二个 ajax 请求(步骤 3)。我已阅读有关 Promise 和的信息如何使用 jQuery Promise 链接三个异步调用?

我不明白为什么使用.done()给出相同的结果,哪一个是正确的方法?我很高兴我可以对 js 进行其他改进,但我的问题是关于使用之间的区别.done()单独与.then()/.done()方法?

我的应用程序正在“工作” - 从某种意义上说,它从两种方式给出了相同的结果 - 但我觉得我犯了一个错误,因为我不明白这些方法之间的区别。请问有人可以澄清一下吗?

不重复:有人建议这是重复的jQuery 延迟和承诺 - .then() 与 .done()。我不认为这是因为它说:

返回结果的处理方式也存在差异(称为链接,done不链接同时then产生调用链)

我已将回调中的变量更新为response2 and response3显示它们在 js 中处于哪一步。不过,我可以使用response2(来自步骤2)在步骤4内,无论我是否使用.done() or .then()。这怎么可能?结果是我想要的,但我不明白它是如何运作的,这令人担忧。


这个问题是重复的。jquery-deferreds-and-promises-then-vs-done

简而言之:

promise.then( doneCallback, failCallback )
// was equivalent to
promise.done( doneCallback ).fail( failCallback )
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

jquery - 连续使用 .done() 给出与 .then() / .done() 相同的结果 的相关文章

随机推荐

  • 按进程获取电池使用情况

    我有一个代码 在 C 中 用于管理在我的计算机中启动的所有进程 我用性能计数器用于查找在一个特定进程中链接的所有值的类 例如 此代码检索了 Firefox 的处理器时间使用情况 PerformanceCounter processorTim
  • 如何使用 BeautifulSoup 删除嵌套标签中的内容?

    如何删除嵌套标签中的内容BeautifulSoup 这些帖子显示了相反的情况来检索嵌套标签中的内容 如何使用 BeautifulSoup 获取嵌套标签的内容 and BeautifulSoup 如何从包含一些嵌套 的 列表中提取所有 我努力
  • 合并字典而不覆盖值

    这似乎是一个简单的任务 我正在尝试合并两个字典而不覆盖值但附加 a 1 1 1 2 2 2 3 3 3 4 4 b 3 5 5 4 6 6 元组数量 a 4 元组数量 b 2 这就是为什么我单独列出这些选项 因为它们会覆盖 all dict
  • 当隔离级别为 READ_UNCOMMITTED 时,无法看到正在运行的事务插入的行

    我有将行插入表的应用程序A同时 每个应用程序以批处理模式插入行 使用 JDBC 准备好的语句 每批使用一个事务 以避免在每次插入后重建索引 INSERT 每个批次中存在的行是完全独立的 事务仅用于优化 每个插入的行都会自动设置其主键 AUT
  • 以图像为背景的热图

    我正在尝试使用 R 制作热图 我正在尝试使用 ggplot2 我的实际数据框要大得多 但在这里我只包含一小部分 x lt c 502 9 512 1 716 6 759 7 776 1 776 5 736 1 271 3 304 7 279
  • 在NDK中使用资源文件

    我正在创建一个 NDK 库 它需要包含和访问二进制数据文件 dat 扩展名 我无法让已编译的库查看此文件 为了让事情变得更加困难 我在库包中执行此操作 我认为如果在我的 Android mk 文件期间 将此 dat 文件复制到我的应用程序的
  • 如何在ASP.NET中获取提示值?

    我想要做的是 当用户在提示框中输入文本并按下 确定 按钮时 提示框会将值发送回string prmt 如果他们取消了提示 则不会执行任何操作 Codes string prmt if ren gt 1 ClientScript Regist
  • 静态方法的目的是什么?我如何知道何时使用? [复制]

    这个问题在这里已经有答案了 我使用以下代码在 python 中遇到了未绑定方法错误 import random class Sample object def drawSample samplesize List sample random
  • 让 Rails 接受欧洲日期格式 (dd/mm/yyyy)

    我希望我的 Rails 应用程序接受格式为 dd mm yyyy 的日期字段的日期 在我的模型中 我尝试将日期转换为美国标准 我认为 Rails 将调用它的 Date parse 方法是期望的 before validation check
  • 为列表视图设置背景

    我有四个选项卡 其中包含四个列表视图 我想为每个列表视图设置背景 但每当我尝试添加背景时 它都会将图像放置在列表视图的每个单元格中 而不是列表后面
  • Swift Json 如何在没有顶级密钥和自动生成的密钥的情况下进行解码

    这对我没有帮助 Swift 4 解析 1 n 数量的 json 数字键 情况有所不同 我有这个 JSON 稍微简化了一点 1 name Tea room description A room for tea 2 name Playgroun
  • 如何在root手机上获取NFCEE_ADMIN权限?

    NFCEE ADMIN 权限是签名级别 但是 是否有可能在已root的手机上 作弊 以获得此权限 也许使用类似的技术ClockSync 的工作方式 我正在尝试使用反射技术来访问 NFCExtras mAdapter NfcAdapter g
  • 如何在Python 3中生成0到无穷大之间的N个随机数

    如何在 python 3 中生成 n 个随机数 n为待 定变量 最好是自然数 整数 gt 0 我找到的所有答案都采用一定范围内的随机整数 但是我不想从一定范围内生成数字 除非范围是 0 到无穷大 用维特根斯坦的话来说 机器的限制就是语言的限
  • Woocommerce (3.0) 产品类型不会保存

    最近将 Woocommerce 更新到 3 0 之后我在保存我创建的自定义产品类型时遇到问题 这就是代码现在的样子 function register xxxxxx product type class WC Product package
  • 如何在任务栏上制作Windows 7加载栏

    I want to create a windows 7 loading bar on the taskbar something like this 我已经有一个 jframe 框架 可以在其中加载游戏 我想让loadingbar显示下载
  • Vectorise 查找最接近的日期函数

    我想传递一个日期向量 并从第二个 部分匹配 日期向量返回最接近的日期 以下函数满足我对单个日期的要求 但是我不知道如何将其推广到以下情况 searchDate是日期向量 closestDate lt function searchDate
  • Linq:如何将行转换为具有计数的列(交叉表数据)?

    我认为我需要一种方法来使用 C 和 Linq 执行具有不确定数量的列的数据透视表或交叉表 不过 我将添加一些开始细节 看看它会走向何方 想象一个有两个字段的表 string EventName Datetime WhenItHappend
  • 更改背景颜色不透明度而不更改背景图像不透明度

    我想在用户悬停按钮时增加按钮的背景颜色亮度 但我想这样做 无论按钮的颜色如何 在下面 您可以看到四个按钮 只有最后一个有效 因为它有 hover处理程序显式配置为黄色 hoverme display inline block padding
  • 使用 LinkedIn API CDN(https://platform.linkedin.com/in.js) 登录是否已损坏?

    我正在使用 Angular v6 的不同 NPM 包通过 LinkedIn API 登录 但我在每个包裹中都面临一个问题 即使在上次运行的用 JavaScript 开发的网站中 现在也抛出了同样的问题 调试后发现问题在https platf
  • jquery - 连续使用 .done() 给出与 .then() / .done() 相同的结果

    编辑 请参阅底部的注释 了解为什么我不认为这是重复的问题 使用jquery 3 2 1和Bootstrap 3 3 7 我的应用程序的部分流程如下 用户单击模式窗口内 ID 为的锚点 notifierModal 这使得第一个ajax请求它将