数据插入成功但jQuery AJAX success回调函数未触发,代码存在什么问题?
问题排查与解决方法
你遇到的AJAX请求成功但success回调不执行的问题,通常由以下几个常见原因导致:
- 未指定
dataType参数,jQuery自动解析响应失败
你当前的代码没有声明响应的数据类型,jQuery会自动尝试识别响应内容格式,如果后端返回的内容不是合法JSON(比如存在PHP警告输出、多余空格/换行、非JSON字符串),哪怕请求状态码是200,也会判定为请求失败进入error回调,不会触发success。 - jQuery对象调用原生
reset()方法报错$('#editdonorForm')是jQuery包装后的对象,本身没有reset()方法,直接调用会抛出JS错误,导致success回调执行到这一行就直接中断,后续代码也不会运行。正确写法是取原生DOM节点调用:$('#editdonorForm')[0].reset()。 - 依赖未初始化或未定义导致报错
检查以下依赖是否正常:- swal(SweetAlert)是否已经正确引入到页面中,如果
swal变量未定义,调用时会抛出错误中断回调 donorTable对应的DataTable实例是否已经正确初始化,未定义的情况下调用donorTable.ajax.reload()也会导致回调中断
- swal(SweetAlert)是否已经正确引入到页面中,如果
调试建议
- 打开浏览器开发者工具的「控制台」标签,提交请求后查看是否有JS报错,可直接定位出错的代码行
- 切换到开发者工具的「网络」标签,找到对应的AJAX请求,查看响应内容是否为合法JSON格式,是否存在多余的输出内容
- 在success回调第一行添加
console.log('success triggered', response),确认回调本身是否被触发
修正后的代码示例
$('#editdonorForm').on("submit", function (event) { event.preventDefault(); $.ajax({ type: "POST", url: "includes/goods_campaign/update_conn.php", data: new FormData(this), cache: false, contentType: false, processData: false, dataType: "json", // 新增:指定响应为JSON格式 beforeSend: function () { $('#updateDonor').val("Updating"); }, success: function(response) { $('#editdonorForm')[0].reset(); // 修正:调用原生DOM的reset方法 $('#update').modal('hide'); swal({ title: "Donor Updated", text: response.message, icon: "success", button: "Done" }); if (typeof donorTable !== 'undefined') { // 新增:判断变量存在再调用 donorTable.ajax.reload(); } }, error: function(xhr, error, status){ console.log(xhr.responseText); // 建议改为打印详细错误信息,方便排查 alert('请求出错:' + status); } }); });
内容的提问来源于stack exchange,提问作者John Lloyd Daro
相关产品推荐
相关产品推荐

