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

GET/HEAD请求含请求体致fetch执行失败的TypeError问题

解决GET请求携带请求体导致的TypeError错误

你碰到的这个错误完全是因为HTTP的基础规范——GET和HEAD请求是不允许携带请求体的,浏览器的fetch API严格遵守了这个规则,所以当你给GET请求加body参数时,就直接抛出了TypeError。

先看看你的问题代码:

export const checkMobile = mobile => { 
  return ajax(`/mobiles/search`, { method: "GET", body: mobile }); 
}; 

function ajax(uri, options = {}) { 
  const defaultOptions = getDefaultOptions(); 
  options.method = options.method ? options.method : defaultOptions.method; 
  if (!options.formType) { 
    options.headers = options.headers ? options.headers : defaultOptions...
  }
}

这里的核心问题就是method: "GET"和body: mobile同时存在的矛盾。

给你两个可行的解决方案,根据后端接口的支持情况选:

方案一:改用POST请求(如果后端允许)

如果后端接口可以接受POST方法来处理这个查询,直接把请求方法改成POST就行,记得如果需要传JSON格式的参数,还要做好序列化并设置对应的请求头:

export const checkMobile = mobile => { 
  return ajax(`/mobiles/search`, { 
    method: "POST", 
    body: JSON.stringify({ mobile }), // 序列化参数
    headers: { 'Content-Type': 'application/json' } // 告诉后端参数格式
  }); 
};

方案二:把参数放到URL查询字符串里(适配GET请求)

如果后端只支持GET请求,那就把mobile参数拼到URL的查询参数中,这是GET请求传递参数的标准方式:

方式1:手动拼接(注意编码)

export const checkMobile = mobile => { 
  // 用encodeURIComponent处理特殊字符,避免URL解析错误
  return ajax(`/mobiles/search?mobile=${encodeURIComponent(mobile)}`, { method: "GET" }); 
};

方式2:用URLSearchParams(更规范)

export const checkMobile = mobile => { 
  const params = new URLSearchParams();
  params.append('mobile', mobile);
  return ajax(`/mobiles/search?${params.toString()}`, { method: "GET" }); 
};

这样就完全不需要传body参数了,符合GET请求的规范,错误自然就消失了。

另外也可以检查下你的ajax函数里的defaultOptions,看看默认请求方法是不是GET,避免后续不小心再犯同样的错误~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:13:41