jQuery Ajax发送DELETE请求返回200却触发error事件如何解决
问题根因
你触发error事件的核心原因是AJAX配置了dataType: 'JSON',jQuery会强制将返回结果解析为JSON格式,但你后端删除逻辑执行完成后没有输出任何合法JSON内容,返回的responseText为空字符串,JSON解析失败就会进入error回调。
你看到的严格模式相关报错不属于业务代码问题,是浏览器控制台读取jQuery封装的XHR对象内置属性时,访问了严格模式下限制访问的caller/arguments属性触发的提示,不影响业务逻辑,无需额外处理。
可行解决方法
方案1:后端返回合法JSON响应(推荐)
修改你的APIHandler.php删除逻辑,执行完成后输出标准JSON结构,同时设置正确的响应头:
if ($_SERVER['REQUEST_METHOD'] === 'DELETE') { // 先设置JSON响应头 header('Content-Type: application/json'); $vals = $_GET['values']; $API->delete($vals); // 输出合法JSON结构,可根据业务需要自定义字段 echo json_encode([ 'status' => 'success', 'message' => '数据删除完成' ]); exit; }
方案2:修改AJAX配置适配空响应
如果你确实不需要后端返回任何内容,可以调整AJAX的dataType配置,同时增加空响应兼容逻辑:
function ajaxCall(method,hmm){ $.ajax({ // 移除强制JSON解析配置,或改为dataType: 'text' // dataType: 'JSON', url: '/APIHandler.php?' + $.param({values:hmm}), type: method, success: function(response) { console.log(response); const parentDiv = document.querySelector('#basic-grid'); removeAllChildNodes(parentDiv); // 仅当有返回内容时执行转对象逻辑 if(response && response.length > 0) { turnToObjects(JSON.parse(response)); } }, error: function(xhr){ alert(xhr); console.log(xhr); } }); }
内容的提问来源于stack exchange,提问作者Leon Kardaš
相关产品推荐
相关产品推荐

