You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用$.when实现两个AJAX请求并行执行(适配DataTables场景)

你可以直接把两个AJAX请求的Deferred实例作为参数传入$.when实现并发发起,各自的成功回调会在请求完成后独立触发,不会互相等待,正好匹配你说的「DataTable关联请求更快先执行初始化,Excel导出请求慢后执行回调」的需求。如果不需要两个请求都完成后执行统一逻辑,也可以仅保留并发请求的写法,$.when的回调可以留空或者根据你的需求补充。

改写后的完整代码
$(document).ready(function() {
    $(document).on('click', '#Button',function (e) {
        e.preventDefault();
        var isExcel = document.getElementById('Excel').checked ? 1 : 0;

        // 第一个请求:获取页面内容并初始化DataTable
        var request1 = $.ajax({
            url: "page1",
            cache: false,
            data : $('#form').serialize(),
            method: "post",
            success: function(response){
                $('.mytable').show();
                $('.mytable').html(response);
            }
        }).done(function(data) {
            $("#datatables").DataTable({
                "bFilter": true,
                "serverSide": true,
                "deferRender":true,
                "processing": true,
                "ajax": {
                    "url" : "/data.cfm",
                    "type" : 'post'
                }
            });
        });

        // 第二个请求:Excel导出,不需要时赋值已完成的空Deferred
        var request2 = isExcel ? $.ajax({
            url: "/excel.cfm",
            cache: false,
            data : $('#form').serialize(),
            method: "post",
            success: function(response){
                alert('done');
            }
        }) : $.Deferred().resolve();

        // 用$.when监听两个请求的状态,需要统一回调可以补充到done里
        $.when(request1, request2).done(function(res1, res2) {
            // 这里可以加两个请求都完成后需要执行的逻辑,不需要就留空
        });
    });
});
关键说明
  • 我们先声明了request1和request2两个变量存储AJAX请求返回的Deferred对象,两个请求会在定义后立刻并发发起,不会等待另一个请求初始化
  • 当isExcel为0不需要导出时,我们给request2赋值一个已经完成的空Deferred对象,避免$.when接收空参数报错
  • 原有的第一个请求的页面渲染、DataTable初始化逻辑,和第二个请求的导出成功提示逻辑都保留,会在对应请求完成后立刻触发,无需等待另一个请求结束
  • 如果有需要在两个请求都完成后执行的逻辑,可以补充到$.when的done回调中

内容的提问来源于stack exchange,提问作者Regual

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 18:39:02