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

scalajs-react中Ajax GET与DELETE请求回调执行表现不一致问题

问题原因分析

你遇到的DELETE请求onComplete回调不触发、GET请求正常的差异,主要是以下几个原因导致的:

  • CORS预检请求未通过
    GET属于HTTP简单请求,只要服务端配置了基础跨域头就能正常触发回调;而DELETE属于非简单请求,浏览器会先发起OPTIONS预检请求,验证服务端是否允许跨域访问DELETE接口。如果服务端没有正确处理OPTIONS请求(未返回Access-Control-Allow-Methods: DELETE、Access-Control-Allow-Origin和你前端域名不匹配等),浏览器会直接拦截该请求,不会触发后续的onComplete回调。你可以先打开浏览器控制台的网络标签,确认是否有OPTIONS请求返回了错误状态码。
  • 请求头与请求内容不匹配
    你给DELETE请求调用了setRequestContentTypeJsonUtf8,会设置Content-Type: application/json; charset=utf-8请求头,但你调用send("")传入的是空字符串,不属于合法JSON格式,部分浏览器或scalajs-react的Ajax底层实现会因为请求内容不符合声明的类型直接终止请求,不会触发完成回调。
    修复方案:DELETE请求通常不需要提交请求体,你可以直接删掉setRequestContentTypeJsonUtf8调用即可;如果接口要求必须带JSON请求头,把send("")改成send("{}")即可。
  • 服务端响应状态码异常
    大部分遵循REST规范的DELETE接口成功后会返回204 No Content状态码,响应体为空,部分旧版本的scalajs-react对204状态的响应处理存在bug,也可能导致回调不触发。你可以在网络标签确认DELETE请求的实际返回状态码,临时改成让服务端DELETE接口返回200测试回调是否能正常触发。
  • 代码语法错误
    你贴出的DELETE请求代码中,200状态分支的末尾多了一个多余的右括号),如果实际运行代码也存在这个语法问题,会导致编译错误或者运行时异常,提前终止逻辑,也会出现回调不触发的现象。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 17:24:06