ajax返回字符串,前台页面比较为false

本文描述了一个关于使用alert输出结果与预期不符的问题,并提供了解决方案。问题在于alert输出结果和比较字段一致,但结果始终为false。通过参考论坛帖子找到了解决办法。

奇怪了半天,命名alert输出结果和比较字段的结果是一样的,可结果一直是false。后来在下面的帖子中找到解决方法,受教了。

原文:http://www.iteye.com/problems/70079


<think>我们正在处理一个关于JSP页面中TIMESTAMP类型数据显示为long类型的问题。 根据用户提供的引用内容,我们可以总结出以下几点关键信息: 1. 在JSP中,如果从后台传递过来的时间属性是一个Date对象,但实际显示为long类型的时间戳,可能是因为在传递过程中Date对象被转换成了long类型的时间戳(如引用[2]和[3]所述)。 2. 引用[1]展示了一种在JSP中处理long类型时间戳并格式化为字符串的方法:使用Date和SimpleDateFormat类。 3. 引用[3]提供了一个JavaScript函数,用于将long类型的时间戳转换为格式化的日期时间字符串,这通常用于前端处理。 可能的原因: - 后台将Date对象作为long类型的时间戳传递给了前台(例如,在JSON序列化过程中,Date对象被转换成了时间戳)。 - 在JSP中直接使用了Date对象的getTime()方法获取了long值,或者没有正确格式化。 解决方案: 1. 在JSP页面中,如果得到的是long类型的时间戳,可以将其转换为Date对象,然后格式化为字符串(如引用[1]所示)。 2. 如果是在JSON数据返回了long类型的时间戳,可以在前端使用JavaScript进行格式化(如引用[3]所示)。 3. 检查后台代码,确保在传递Date对象时,没有被意外转换为long类型。如果使用了JSON序列化工具(如Jackson),可以配置其日期格式,使其直接输出为格式化字符串而不是时间戳。 具体步骤: 方法一:在JSP中处理(适合在服务器端渲染) 示例代码: ```jsp <% Long timeStamp = (Long) request.getAttribute("timestamp"); if (timeStamp != null) { Date date = new Date(timeStamp); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String formattedDate = sdf.format(date); out.print(formattedDate); } %> ``` 注意:需要在JSP头部引入java.util.Date和java.text.SimpleDateFormat。 方法二:在JavaScript中处理(适合前后端分离或AJAX获取数据的情况) 如果数据是通过AJAX请求获取的,并且返回的是JSON数据,其中时间字段为long类型的时间戳,那么可以在前端使用JavaScript函数进行转换。 示例JavaScript函数(如引用[3]所示,稍作调整): ```javascript function formatTimestamp(timestamp) { if (timestamp == null) return ""; // 如果timestamp是字符串,且包含"/Date("和")/",则需要提取数字部分 if (typeof timestamp === 'string') { timestamp = parseInt(timestamp.replace("/Date(", "").replace(")/", "")); } var date = new Date(timestamp); var year = date.getFullYear(); var month = (date.getMonth() + 1).toString().padStart(2, '0'); var day = date.getDate().toString().padStart(2, '0'); var hours = date.getHours().toString().padStart(2, '0'); var minutes = date.getMinutes().toString().padStart(2, '0'); var seconds = date.getSeconds().toString().padStart(2, '0'); return year + '-' + month + '-' + day + ' ' + hours + ':' + minutes + ':' + seconds; } ``` 在页面中调用此函数来格式化时间戳。 方法三:配置JSON序列化器(推荐,从源头上解决) 在Spring Boot中,可以配置Jackson的日期格式,使得所有Date类型都按照指定格式序列化为字符串,而不是long类型。 在application.properties中添加: ```properties spring.jackson.date-format=yyyy-MM-dd HH:mm:ss spring.jackson.time-zone=GMT+8 spring.jackson.serialization.write-dates-as-timestamps=false ``` 或者在配置类中配置: ```java @Configuration public class JacksonConfig { @Bean public ObjectMapper objectMapper() { ObjectMapper objectMapper = new ObjectMapper(); objectMapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")); objectMapper.setTimeZone(TimeZone.getTimeZone("GMT+8")); objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); return objectMapper; } } ``` 这样,所有返回的Date类型都会被格式化为字符串。 总结:根据实际项目情况选择合适的方法。如果是传统的JSP项目,使用方法一;如果是前后端分离,前端可以使用方法二,或者后端使用方法三统一格式化。 相关问题: 1. 如何在Spring Boot中配置Jackson的日期格式? 2. 在JSP中如何正确格式化日期? 3. 如何在前端JavaScript中处理时间戳?</think>### JSP页面中TIMESTAMP类型数据显示为long类型的原因及解决方法 #### 原因分析 1. **JSON序列化问题** 当后台使用`Date`类型字段时,JSON序列化工具(如Jackson)默认将日期转换为long类型时间戳(毫秒数),导致前台接收到形如`/Date(1672531200000)/`或纯数字的时间戳[^2][^3]。 2. **数据类型不匹配** 数据库中的`TIMESTAMP`类型映射到Java实体类时,若使用`Long`类型而非`Date`类型接收,会直接暴露时间戳数值[^2]。 3. **JSP渲染缺失格式化** 在JSP中直接输出未格式化的`Date`对象或`Long`时间戳,会调用其`toString()`方法,输出长整型数值[^1]。 --- #### 解决方案 ##### 方法1:JSP中直接格式化(推荐) ```jsp <%@ page import="java.util.Date, java.text.SimpleDateFormat" %> <% // 从request获取long类型时间戳 Long timestamp = (Long) request.getAttribute("timestamp"); // 转换为Date并格式化 Date date = new Date(timestamp); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String formattedTime = sdf.format(date); %> <!-- 输出结果 --> <%= formattedTime %> <!-- 显示:2023-01-01 12:00:00 --> ``` > **优点**:无需修改后端代码,适合传统JSP项目[^1]。 ##### 方法2:前端JavaScript格式化 ```javascript function formatTimestamp(timestamp) { const date = new Date(parseInt(timestamp)); return date.toLocaleString('zh-CN'); // 格式:2023/1/1 12:00:00 } // 调用示例 const dbTime = ${yourTimestamp}; // JSP中输出long值 document.write(formatTimestamp(dbTime)); ``` > **适用场景**:AJAX异步加载数据时使用[^3]。 ##### 方法3:后端序列化配置(Spring Boot) ```java // 配置Jackson全局日期格式 @Configuration public class JacksonConfig { @Bean public ObjectMapper objectMapper() { ObjectMapper mapper = new ObjectMapper(); mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")); mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); return mapper; } } ``` > **效果**:所有`Date`类型自动转为`"2023-01-01 12:00:00"`格式字符串[^2]。 --- #### 关键注意事项 1. **避免使用`Long`接收时间字段** 实体类中应用`java.util.Date`类型替代`Long`,防止原始时间戳泄露[^2]。 ```java // 正确做法 private Date createTime; // 而非 Long createTime; ``` 2. **时区一致性** 确保数据库/JVM/格式化工具的时区统一(如`Asia/Shanghai`),防止时间偏移。 3. **TIMESTAMP与DATETIME区别** MySQL中`TIMESTAMP`存储为UTC时间,自动转换时区;`DATETIME`按原值存储。建议前后端统一使用UTC时间处理。 --- #### 相关问题 1. 如何在Spring Boot中全局配置日期返回格式? 2. JavaScript如何处理带时区的时间戳转换? 3. MySQL的`TIMESTAMP`和`DATETIME`类型在Java中应该如何映射? [^1]: JSP中格式化long类型时间戳的方法 [^2]: 数据库日期类型字段的Java类型选择建议 [^3]: 前端JavaScript转换时间戳的方案 [^4]: Java参数校验中Long类型的处理规范
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值