web工程前后台换行符传递与转义

问题描述

该问题源自于一个数据展示问题, 后台文本中的换行符\n通过ajax请求反馈给前台, 前台解析json失败, 导致无法执行ajax的回调函数, 前台解析报错为:
Uncaught SyntaxError: Unexpected token in JSON at position 101

问题分析

产生该问题的表象为前台js以json格式解析返回串, 解析到转义符\, 但无法识别跟随的n, 从而认为是返回数据问题而报错
但该问题并非到此为止, 由于前台html中换行符不同于后台\n, 仍需要在前台接收信息后做文本替换, 再渲染到对应的页面元素中

解决方案

后端使用groovy实现, 用来将实际内容中的换行符改为\\n, 同时将其他\转义符替换为斜杠/
注意replace中一个反斜杠文本\要用四个反斜杠\\\\表示, 原因是需要经过java和正则两个步骤的转义, 所以需要2*2=4个反斜杠, 同理, 想替换为\\n就需要8个反斜杠…

def sql = DB.getSql();
def jsonStr = JSONObject.toJSONString(sql.rows(reaSql));
jsonStr.replaceAll("\\\\","/").replaceAll("/n","\\\\\\\\n");

前端接收到响应数据解析json时, 会把文本中的\\n转义为\n, 所以针对前端的转义工作, 就需要将目标文本中的\n替换为<br>
这里replace同样要经过js和正则两个步骤转义, 需要4个反斜杠表示, 具体实现如下

var reg = new RegExp("\\\\n", "gmi");
var rep = data.eventMessage.replace(reg, "<br>");
$(".eventMessage").html(rep);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值