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

JavaScript如何通过Promise获取指定变量值 解决statelist未定义报错

问题说明

使用Python库streamlit_javascript运行Promise代码,尝试获取前端JS中定义的statelist变量值时,运行抛出statelist not defined错误。

  • 当前编写的响应处理代码:
return_value = st_javascript("""await fetch("http://localhost:8501").then(function(response){
console.log("Success!", response);
return response.json($statelist); });""")
  • 待获取的目标变量前端定义代码:
var statelist = new Set()
statelist.add('Kansas')
报错原因
  • 对fetch和response.json()的用法理解错误:response.json()是用来把fetch拿到的HTTP响应体解析为JSON对象的内置方法,不接受传入自定义变量作为参数,本身也没有读取目标页面JS运行时变量的能力。
  • 取值逻辑走偏:fetch请求只能拿到目标地址返回的静态文本内容(比如HTML源码、接口返回的JSON数据),不会自动执行返回内容里的JS代码,自然不可能访问到页面运行时才生成的statelist变量。另外代码里写的$statelist属于无意义语法,JS原生没有这种变量引用写法。
正确修复方式

如果statelist和你执行st_javascript的环境属于同一个前端全局上下文,根本不需要发fetch请求,直接读取变量返回即可;注意Set类型无法直接做跨语言序列化,要先转成普通数组:

return_value = st_javascript("""
// 直接读取同上下文的全局变量,Set转数组保证Python端能正常接收
return Array.from(statelist);
""")

如果statelist是定义在独立的目标页面运行时里,普通fetch请求根本拿不到这个值,你需要要么在目标页面把statelist的值写到可被接口返回的位置,要么通过同源iframe通信的方式传递值——fetch本身只能拿静态响应内容,不可能触达页面JS的运行时内存。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 21:39:15