Layui文本域仅接收纯文本,需用.value或.val()赋值;layedit富文本编辑器则要求setContent传入合法HTML字符串,不可直接传JSON对象,否则显示[object Object]或报错。
Layui 文本域(textarea)本身不解析或渲染后台数据,它只是个普通表单控件;真正能“接收并展示”后台 JSON 数据的,是 layedit 富文本编辑器——而它要求数据必须是 HTML 字符串格式,不是原始 JSON。
常见错误是直接把后端返回的纯 JSON 对象(比如 {"title":"测试","content":"
正文
"})塞进 layedit.setContent(index, jsonObj)。Layui 会尝试把整个对象转成字符串再插入 DOM,结果变成 [object Object] 或直接报错。
layedit.setContent() 只接受字符串参数,且该字符串必须是合法 HTML(含标签),不能是 JSON 对象或未转义的纯文本{ "content": "<p>Hello</p>" } 这种 HTML 实体编码内容,要先用 DOMPurify.sanitize() 或 decodeURIComponent(escape()) 解码,否则显示为源码{"blocks":[{"text":"xxx"}]}),必须在前端转换为 HTML 才能被 layedit 渲染假设后端返回结构为:{"code":0,"msg":"","data":{"id":123,"content":"<p>欢迎使用</p><img src='/upload/1.jpg'>"}}
$.get('/api/detail', {id: 123}, function(res){...}) 获取响应,确认 res.code === 0
res.data.content,注意它可能是 HTML 字符串、实体编码字符串,或需进一步处理的字段layedit.setContent(editIndex, res.data.content || '') —— 不要传 res.data 整体对象如果只是用原生 textarea(没初始化 layedit),那就简单得多:直接赋值 .value 或 jQuery 的 .val()。
{"msg":"ok","data":{"remark":"用户填写的备注"}} → 取 res.data.remark
document.getElementById('remark').value = res.data.remark || ''$('#remark').val(res.data.remark || '')
<script>alert(1)</script>),虽不会执行,仍建议服务端过滤或前端用 textContent 替代 innerHTML 渲染场景后端返回的文本含中文、换行符(n)时,textarea 能正常显示,但 layedit 会把 n 当作普通字符而非换行,导致排版错乱。
n 转成 <br>,或前端手动替换:res.data.content.replace(/n/g, '
')
src="upload/1.jpg"),需确保前端域名与图片可访问路径一致,否则回显时图片 404height,但内容过长导致滚动条遮挡按钮,可在 done 回调里调用 layedit.sync(editIndex) 强制同步高度