Java Servlet传递日期字符串异常:浏览器将日期解析为计算值
解决浏览器将日期字符串解析为除法运算的问题
嘿,这个坑我之前踩过!你遇到的问题核心就是:浏览器把22/01/2019这种带斜杠的字符串当成了连续除法运算——22÷1÷2019,算出来可不就是那些奇怪的数字嘛😅。要让浏览器把它当成纯字符串处理,我们可以从这几个环节入手:
1. 后端Servlet确保传递的是字符串类型的JSON值
检查你创建JsonPrimitive的代码,一定要明确用字符串构造,避免让JSON库自动把斜杠格式的内容误判为数值相关类型:
// 正确:直接传入格式化后的日期字符串 JsonPrimitive datePrimitive = new JsonPrimitive("22/01/2019"); // 错误示例:如果是从Date对象转换,务必先格式化为字符串再封装 // 不要直接传Date对象或者未格式化的数值
2. 生成HTML调用代码时给日期参数加引号
这是最关键的一步!你生成的JavaScript调用代码里,日期参数必须是带引号的字符串字面量,而不是裸写的表达式。比如:
- 错误生成的代码:
showDueDateUpdateDialogue(123, 22/01/2019)→ 浏览器会执行除法 - 正确生成的代码:
showDueDateUpdateDialogue('123', '22/01/2019')→ 浏览器识别为字符串
如果你用的是JSP或者模板引擎生成HTML,可以这样处理:
<% String inNo = "123"; String dateStr = "22/01/2019"; %> <button onclick="showDueDateUpdateDialogue('<%= inNo %>', '<%= dateStr %>')">更新截止日期</button>
3. 前端函数内部做类型兜底处理
为了保险起见,在showDueDateUpdateDialogue函数里强制把日期参数转成字符串,避免意外的类型解析:
function showDueDateUpdateDialogue(in_no, date) { // 强制转为字符串,确保不会被当作运算处理 const formattedDate = String(date); console.log(formattedDate); // 现在输出的就是"22/01/2019"了 // 后续对话框展示逻辑使用formattedDate即可 }
总结
本质就是要让浏览器明确知道这个值是字符串而非可执行的表达式。从后端传递、前端生成调用代码、函数内部处理三个环节都可以加固,其中给参数加引号是最直接有效的办法。
内容的提问来源于stack exchange,提问作者juju
相关产品推荐
相关产品推荐

