You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Flask向JavaScript传数据时出现Unexpected token {的JSON语法错误

解决Flask向JS传递JSON时的SyntaxError问题

嘿,这个问题我之前踩过坑!Uncaught SyntaxError: Unexpected token {这个错误几乎都是因为Flask传递的数据格式和你JS解析的方式不匹配导致的,我来给你捋捋常见的问题和解决办法:

1. 你可能重复解析了JS对象

很多新手会犯这个错:Flask传递的数据已经被渲染成合法的JavaScript对象了,你却还要用JSON.parse()去解析它,自然会报错。

举个反例:

Flask端代码

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def index():
    # 定义要传递的数据
    my_data = {"username": "Kharak", "score": 99}
    return render_template('index.html', data=my_data)

错误的JS写法

// 这里会报错!因为{{ data }}渲染后是{username: "Kharak", score: 99},已经是JS对象
const data = JSON.parse('{{ data }}');

正确的写法

直接使用渲染后的对象,不需要JSON.parse()

const data = {{ data|tojson|safe }};

这里tojson是Flask自带的过滤器,会把Python对象转成合法的JSON字符串,safe过滤器告诉模板不要转义引号等特殊字符,这样渲染后就是一个直接可用的JS对象。

2. 通过AJAX请求传递数据时的错误

如果你是用AJAX(比如fetch/axios)从Flask接口拿数据,要确保Flask端用jsonify返回响应,而不是直接返回字符串:

Flask端正确写法

from flask import Flask, jsonify

app = Flask(__name__)

@app.route('/api/get-data')
def get_data():
    my_data = {"username": "Kharak", "score": 99}
    # 用jsonify返回,会自动设置正确的Content-Type头
    return jsonify(my_data)

JS端正确写法

// 用fetch请求,response.json()会自动解析JSON,不用手动JSON.parse
fetch('/api/get-data')
  .then(res => res.json())
  .then(data => {
      console.log(data.username); // 输出Kharak
  })
  .catch(err => console.error('请求出错:', err));

如果这里你非要手动用JSON.parse(),那得确保拿到的是纯字符串响应,但jsonify返回的已经是JSON格式,res.json()更省心。

3. 特殊字符未转义导致JSON格式损坏

如果你的数据里包含换行、单引号、双引号这类特殊字符,没有正确转义的话,会破坏JSON结构,导致JSON.parse()失败。

这种情况用tojson过滤器就可以解决,它会自动转义所有特殊字符:

const data = {{ my_data|tojson|safe }};

总结一下

最常见的问题就是把已经是JS对象的数据拿去用JSON.parse解析,或者传递的JSON字符串因为未转义特殊字符导致格式不合法。用Flask的tojson过滤器+safe,或者用jsonify配合AJAX的自动解析,基本就能解决这个问题。

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

火山引擎 最新活动