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

如何手动触发jQuery AJAX请求,实现先发请求再设置加载屏?

jQuery AJAX 手动发送请求的解决方案

首先明确:jQuery的$.ajax()在调用时就会自动发起请求,你调试时看到请求在加载屏设置后才发送,是因为JavaScript的单线程事件循环机制——当前同步代码(设置加载屏)执行完毕后,浏览器才会处理AJAX请求的发送逻辑,所以两种写法的实际效果完全一致。

如果想要完全手动控制请求的发送时机(先发送请求,再执行加载屏设置),可以通过以下两种方式实现:

方式一:使用原生XMLHttpRequest对象

原生XHR支持手动调用send()方法触发请求,完全符合你的需求:

$([SOME BUTTON]).click(()=>{
    // 初始化并配置XHR
    const xhr = new XMLHttpRequest();
    xhr.open('GET', [address]); // 根据实际需求替换请求方法(如POST)

    // 绑定成功/失败回调
    xhr.onload = function() {
        if (xhr.status >= 200 && xhr.status < 300) {
            // 处理成功响应逻辑
        } else {
            // 处理HTTP错误
        }
        // 移除加载屏
    };
    xhr.onerror = function() {
        // 处理网络错误
        // 移除加载屏
    };

    // 先发送请求
    xhr.send();

    // 再设置加载屏
    // Set up a loading screen
});

方式二:利用异步队列延迟加载屏设置

如果不想切换到原生XHR,可以将加载屏的设置代码放入异步队列,让AJAX请求优先进入处理流程:

$([SOME BUTTON]).click(()=>{
    let jqxhr = $.ajax([address]);

    // 将加载屏设置放入下一事件循环,让请求先发起
    requestAnimationFrame(() => {
        // Set up a loading screen
    });

    jqxhr.done(()=>{
            // 处理成功逻辑
        })
        .fail(()=> {
            // 处理错误逻辑
        })
        .always(()=>{
            // 移除加载屏
        });
});

需要注意的是,即使使用第二种方式,请求的实际发送时机仍受浏览器事件循环的影响,但能尽可能让请求更早发起。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 11:40:35