前台传值包含引号,作为ajax属性传到后台,保存报500

本文介绍了一个使用JavaScript和AJAX实现的工作中心名称验证及保存功能。通过AJAX的POST请求将用户输入的工作中心名称发送到服务器进行唯一性检查,如果名称重复则提示用户,否则调用另一个函数完成所有表单数据的保存。

function save(){
    var name = $("#GZZXMC").val();
    $.ajax({
        type: "post",
        url: contextRootPath + "/gzzx/saveZxName.xhtml",
        async: false,
        cache: false,
        data:{"name":name, "formLogicId":"143934251946590"},
        success: function(obj){
            var data = eval("("+obj+")");
	    if(data=='1'){
	        alert("工作中心名称重复了!");
	        return false;
	    }
            if(data=='0'){ 
	        FormSaveAll();
	    }
        },
        error: function(){
            alert("系统出错!");
        }
    });
}

 

String name = proprety.get("name").toString();
// 替换工作中心名称中存在的引号
name = name.replace("'", "'");
name = name.replace("\"", """);

 

### JSON 字符串引号转义问题分析 当从前端发送包含引号或双引号的 JSON 数据至后端时,可能会遇到字符实体转义的情况。具体来说,在某些情况下,浏览器会将原始 HTML 特殊字符(如 `"` 或 `'`)转换成对应的HTML 实体形式 (`"`),这会导致服务器接收到的数据不符合预期格式[^1]。 对于JSON标准而言,键名和字符串应当由双引号包围。然而实际开发过程中,开发者有时会在JavaScript对象字面量中使用单引号来定义属性名称或字符串。这种差异可能引发兼容性问题特别是跨平台通信场景下[^2]。 #### 解决方案一:调整前端编码方式 为了避免不必要的转义操作影响数据完整性,可以在前端通过序列化工具处理待发送的对象: ```javascript // 使用原生方法 const jsonData = JSON.stringify({ 'key': "value with 'single' and \"double\" quotes" }); fetch('/api/endpoint', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: jsonData, }); ``` 这种方法确保了所有的特殊字符都被正确地进行了预处理,从而防止它们在输途中被意外修改。 #### 解决方案二:服务端解码逻辑优化 如果确实存在已转义的内容到达后端,则应在接收请求的地方加入相应的反向解析过程。以Java为例,可以利用Apache Commons Lang库中的StringEscapeUtils类来进行反转义: ```java import org.apache.commons.lang3.StringEscapeUtils; public class ExampleController { @PostMapping("/example") public ResponseEntity<String> handleRequest(@RequestBody String rawJson) throws JsonProcessingException { ObjectMapper mapper = new ObjectMapper(); // 反转义HTML实体 String unescapedJson = StringEscapeUtils.unescapeHtml4(rawJson); Map<String, Object> data = mapper.readValue(unescapedJson, Map.class); return ResponseEntity.ok("Success"); } } ``` 上述代码片段展示了如何对接收自客户端未经加工过的JSON文本执行HTML实体还原操作后再继续后续业务流程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值