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

如何防止AJAX请求每次触发两次?jQuery 3.3.1问题排查

解决jQuery AJAX请求重复发送的问题

嘿,我帮你分析下这个AJAX发两次请求的问题!你已经排除了事件重复绑定的可能,那咱们从代码里的几个细节入手:

可能的问题根源

  1. 同步请求(async: false)的隐患
    jQuery 3.3.1里的同步AJAX请求,在某些场景下会因为浏览器的线程阻塞机制,或者jQuery内部的错误重试逻辑,导致请求被重复发送。而且同步请求本身在现代浏览器里就有很多限制,官方也不推荐使用。

  2. 请求头与数据格式不匹配
    你设置了enctype: 'multipart/form-data',但同时又指定了dataType: "json"和mimeType: "application/json",而且直接传入了普通JS对象作为data。这种混合配置会让jQuery在处理请求时产生混淆——multipart/form-data是用于表单或文件上传的编码格式,而你要发送的是JSON数据,两者不匹配可能触发内部的异常处理,导致重复请求。

针对性解决方案

方案1:移除同步请求设置

把async: false删掉(jQuery默认就是异步请求,即async: true),同步请求是很多奇怪问题的诱因,尽量避免使用。

方案2:匹配请求格式与数据编码

如果你的后端接口接收JSON格式数据,调整请求配置如下:

  • 移除enctype: 'multipart/form-data'
  • 将data转换为JSON字符串
  • 设置contentType: "application/json"(明确告诉服务器请求体是JSON)

修改后的代码示例:

$(function() {
    console.log("hi");
    var request = {};
    request["user_id"] = 1;
    request["date"] = new Date();
    request["assignments"] = [{ "point_count" : 1, "skill_mnemo" : "SKILL_FARM" }];
    
    $.ajax({
        type: "POST",
        dataType: "json",
        contentType: "application/json", // 替换mimeType为contentType更合适
        url: "./api/update_skill_point.php",
        data: JSON.stringify(request), // 转为JSON字符串
        cache: false,
        success: function(result) {
            console.log(result);
        }
    });
});

方案3:检查全局AJAX配置

如果上面的修改还没解决问题,检查一下代码里有没有全局的$.ajaxSetup()配置,或者全局绑定的ajaxSend/ajaxBeforeSend事件,这些全局钩子可能会意外触发重复请求。

试一下这些修改,应该能解决请求重复发送的问题!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.12 05:16:28