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

Flask回显含换行的textarea内容时触发Unexpected EOF报错排查

问题根因

Unexpected EOF报错的核心原因是带换行符的文本被直接通过Jinja模板插值到了JavaScript的单引号字符串字面量中。
JavaScript规则里,用单引号、双引号包裹的普通字符串,不允许出现未经转义的真实换行符。当数据库中存储的带换行的文本被{{ campagne[7] }}直接渲染到JS代码里时,字符串会在第一个换行位置被强制截断,JS解析器读到半截不完整的代码,就会抛出意外的文件结束错误。
另外你当前写的keypress事件里把所有换行替换为\r的逻辑完全是冗余的错误逻辑,既解决不了问题,还会导致输入的回车格式异常,后续直接删除即可,textarea原生支持多行输入、保留换行,不需要额外做JS替换处理。

可行修复方案(完整保留换行格式)

选任意一种方案即可,优先推荐第一种,逻辑最简单坑最少:

方案1:直接将内容渲染到textarea标签内部(推荐)

textarea标签原生会把开闭标签之间的文本作为输入框的默认值,完全不需要额外用jQuery赋值,从根源绕开JS字符串转义的问题。
把你原来的空textarea标签修改为:

<div class="col-" id="textarea-div">
   <label><b>Your message: </b></label>
   <br>
   <!-- 直接把模板变量放到textarea开闭标签之间即可 -->
   <textarea rows="5" cols="60" id="campagne_bericht" name="campagne_bericht" maxlength="300" class="form-control" placeholder="Plaats uw bericht hier..." required>{{ campagne[7] }}</textarea>
   <!-- 删掉原来冗余的keypress换行替换逻辑,删掉单独的jQuery赋值代码 -->
</div>

Jinja渲染时会自动转义文本中的HTML特殊字符,换行符会被textarea原生识别,100%保留用户输入的所有回车、空行格式,不会出现任何语法错误。

方案2:如果必须在JS中获取文本赋值,用tojson过滤器做合法转义

如果业务场景要求必须通过JS给textarea赋值,不要直接把模板变量插到字符串引号里,用Jinja内置的tojson过滤器自动处理所有特殊字符(换行、单引号、双引号、斜杠等)的转义,输出标准合法的JS值。
把原来的jQuery赋值代码修改为:

// 注意:tojson输出的内容自带合法的JS类型包裹,外层不要加任何引号
const berichtContent = {{ campagne[7]|tojson }};
$('#campagne_bericht').val(berichtContent);

同样可以完整保留换行格式,不会触发JS语法错误。

验证效果

修复后你测试的那段文本:

I now placed an enter. And I want to save this.

Thanks!

回显时会完整保留段落之间的空行,和用户输入的格式完全一致,不会再出现Unexpected EOF报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 19:09:19