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

Ajax通用请求方法处理DELETE请求时遇204返回码报错问题

解决Ajax DELETE请求返回204却报错的问题

哦,我太懂这个坑了!之前做项目的时候也踩过一模一样的雷——明明服务器按预期返回了204(无内容)的成功状态码,结果自己写的Ajax函数却直接报错了,当时排查了好久才找到原因。

问题根源

大部分Ajax实现(不管是原生XMLHttpRequest还是jQuery这类库)默认会把204状态码当成“异常”处理,核心原因是204响应没有返回任何内容(响应体为空),很多工具的默认逻辑会认为“没有响应数据=请求失败”,哪怕HTTP标准里204明确是成功状态。另外还有个可能:你写的函数里的成功判断逻辑只限定了传入的success参数(比如204),但实际处理时因为响应体为空触发了其他错误分支。

针对性解决方案

根据你是自己写原生Ajax还是用第三方库,分两种情况处理:

1. 如果你是自定义的原生Ajax函数

检查你的成功判断逻辑,确保204状态被明确判定为成功,同时不要因为响应体为空而抛出错误。这里给你修改后的示例代码:

function myAjax(url, data, successCode, method) {
  const xhr = new XMLHttpRequest();
  // 注意:DELETE请求尽量把参数放到URL里(比如/api/items/123),而非请求体
  const requestUrl = method === 'DELETE' && typeof data === 'number' ? `${url}/${data}` : url;
  
  xhr.open(method, requestUrl);
  xhr.setRequestHeader('Content-Type', 'application/json');
  
  xhr.onload = function() {
    // 优先匹配指定的成功状态码,同时覆盖204的情况
    if (xhr.status === successCode || xhr.status === 204) {
      console.log('操作成功!(204无返回内容)');
      // 这里执行你的成功回调逻辑即可,不需要依赖响应体
    } else if (xhr.status >= 200 && xhr.status < 300) {
      // 处理其他成功状态码
      console.log('请求成功');
    } else {
      throw new Error(`请求失败,状态码:${xhr.status}`);
    }
  };
  
  xhr.onerror = function() {
    throw new Error('网络请求出错,请检查连接');
  };
  
  // DELETE请求尽量不要传请求体,遵循HTTP规范
  const requestData = method !== 'DELETE' ? JSON.stringify(data) : null;
  xhr.send(requestData);
}

额外提醒:HTTP规范里DELETE请求通常不携带请求体,很多后端框架对DELETE的请求体支持也不好,所以如果你的data是对象ID,直接拼到URL路径里是更稳妥的做法。

2. 如果你用的是jQuery这类第三方库

以jQuery为例,它的$.ajax默认会把204当成错误触发error回调,这时候你可以通过statusCode配置专门处理204状态:

$.ajax({
  url: yourUrl,
  method: 'DELETE',
  // 同样建议把ID放到URL里,而非data
  data: yourData,
  statusCode: {
    204: function() {
      // 这里写204状态下的成功逻辑
      alert('删除成功!');
    }
  },
  error: function(xhr) {
    // 过滤掉204的情况,只处理真正的错误(4xx/5xx)
    if (xhr.status !== 204) {
      alert(`请求失败:${xhr.status}`);
    }
  }
});

总结

  • 核心是让你的Ajax逻辑明确:204是成功状态,哪怕没有响应体
  • 尽量遵循HTTP规范,DELETE请求不要在请求体里传数据,把参数放到URL中

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:23:28