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

使用js.fetch请求Flask接口时为何意外发送GET请求

问题根因排查

你明确配置PUT方法但实际发起GET请求,是3处代码错误共同/单独触发的,按影响优先级排序:

  • dict_converter参数传错位置
    你代码里把dict_converter=Object.fromEntries作为js.fetch的第三个参数传入,但这个参数是Pyodide中to_js()方法的配置项,不是fetch的合法参数。这会导致to_js(request_params)执行时,默认把Python字典转换成JS的Map类型对象,而fetch API无法识别Map类型的配置对象,读取不到你设置的method: "PUT"字段,就会使用默认值GET发起请求。
  • 请求URL缺少协议前缀
    你传入的请求地址是'127.0.0.1:5000',没有带http:///https://协议头,fetch会把该字符串识别为当前站点下的相对路径,不会请求你本地启动的Flask服务。部分运行时环境下解析非法URL时,也会静默重置请求方法为GET。
  • 请求体未做JSON序列化
    你直接把Python字典作为body字段传入,即使经过to_js转换,得到的也是JS普通对象,和你设置的Content-Type: application/json要求的JSON字符串格式不匹配。fetch遇到格式非法的请求体时,可能不会抛出显性报错,而是直接丢弃body、重置为无请求体的GET请求。
修正后参考代码
import json

txt = "This text here"
data = {"data": txt}

request_params = {
    "method": "PUT",
    "body": json.dumps(data),
    "credentials": "same-origin",
    "headers": {"Content-Type": "application/json"}
}
  
resp = await js.fetch(
    'http://127.0.0.1:5000/your-flask-route-path',
    to_js(request_params, dict_converter=Object.fromEntries)
)

额外提示:如果本地Flask服务开启了CORS校验,记得提前配置Flask-CORS允许对应来源的跨域请求,否则PUT请求会被浏览器跨域策略拦截。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.01 20:54:34