jQuery请求Action局部刷新数据



1.重复提交  
原因:
PrintWriter out = response.getWriter();
out.print(JSONArray.fromObject(list));
之后又
return mapping.findForward("view");
改为return null就OK了

response是对异步请求(XMLHttpRequest)的响应,异步请求并没有页面的刷新重新加载,只是局部的替换更新。

jQuery.load()可以直接替换HTML的某个部分,而不用使用JS解析JSON串(这个没有试过,记得以确用过)动态画出要替换的页面部分。load方法会自动将本分代码替换。


2.Action执行结束却没有执行回调函数
response.setContentType("application/json;charset=UTF-8");
response.setHeader("Cache-Control", "no-cache");
PrintWriter out = response.getWriter();
out.print(JSONArray.fromObject(list));
out.flush();
out.close();
return null;
原因:
JSON串拼错了,crateTime的Value应该是字符串即应该加"",浏览器无法解析

3.直接将查询出的ruleList转为JSON串,日期解析问题
List<Campaigns> ruleList = campaignsService.findAll(condition);
out.print(JSONArray.fromObject(ruleList ));
时间是复杂类型,JSON转换为如下格式:
createTime":{"date":23,"day":1,"hours":15,"minutes":55,"month":5,"seconds":19,"time":1403510119000,"timezoneOffset":-480,"year":114}
时间是2014-06-23 15:55:19对应的毫秒数是:1403510119000
疑问:
不知道为什么year":114,不应该是2014吗?

可以在页面上用毫秒数得到日期时间。正确代码如下

if(data[i].createTime.time != null){
    var date = new Date(parseInt(data[i].createTime.time));
    alert(date.getFullYear()+"-" + (date.getMonth()+1) + "-" + date.getDate()+" "+date.getHours()+":"+date.getMinutes() + ":" + date.getSeconds());
}

开始将var date = new Date(parseInt(data[i].createTime.time));写成Date date = new Date(data[i].createTime.time));
两处错误:
(1).new Date(这里应该是整数);
(2).JS是弱类型语音,没有Date类型。这里受Java影响了


注意:
1.<a class="link3" target="_self" οnclick="viewAjax('3')" href="#">停止</a>  <a>标签的href="#"使得页面不再跳转,
<a class="link3" target="_self" href="<c:url value='/marketing.do?method=view&status=3'/>">停止</a>或者
<a class="link3" target="_self" href="/marketing.do?method=view&status=3'">停止</a>
可直接请求Action
2.JS的Date类型的方法  
var myDate = new Date();
myDate.getYear();        //获取当前年份(2位)
myDate.getFullYear();    //获取完整的年份(4位,1970-????)
myDate.getMonth();       //获取当前月份(0-11,0代表1月)
myDate.getDate();        //获取当前日(1-31)
myDate.getDay();         //获取当前星期X(0-6,0代表星期天)
myDate.getTime();        //获取当前时间(从1970.1.1开始的毫秒数)
myDate.getHours();       //获取当前小时数(0-23)
myDate.getMinutes();     //获取当前分钟数(0-59)
myDate.getSeconds();     //获取当前秒数(0-59)
myDate.getMilliseconds();    //获取当前毫秒数(0-999)
myDate.toLocaleDateString();     //获取当前日期
var mytime=myDate.toLocaleTimeString();     //获取当前时间
myDate.toLocaleString( );        //获取日期与时间

 
日期时间脚本库方法列表

Date.prototype.isLeapYear 判断闰年
Date.prototype.Format 日期格式化
Date.prototype.DateAdd 日期计算
Date.prototype.DateDiff 比较日期差
Date.prototype.toString 日期转字符串
Date.prototype.toArray 日期分割为数组
Date.prototype.DatePart 取日期的部分信息
Date.prototype.MaxDayOfDate 取日期所在月的最大天数
Date.prototype.WeekNumOfYear 判断日期所在年的第几周
StringToDate 字符串转日期型
IsValidDate 验证日期有效性
CheckDateTime 完整日期时间检查
daysBetween 日期天数差

3.不要求线程安全的,优先使用StringBuilder
StringBuilder与StringBuffer的区别(转)
http://www.cnblogs.com/Fskjb/archive/2010/04/19/1715176.html
4.<a class="link3" target="_self" οnclick="viewAjax('1');" href="javascript:void(0);">活动</a>
局部刷新,页面需要分频显示时,要保持滚动条不动,除非页面变短


性能相关
1.使用List<Map<String,Object>>处理数据的原因是ruleList里有大量冗余数据。
2.StringBuffer与StringBilder跟HashTable与HashMap(《Tinking in Java》)类似。一个是线程安全的(很多方法都是synchronized方法),而另一个不是(在单线程程序中的性能比前者高)。


关于JSON

直接将查询到的List 输出(List的一条记录对应数据库表中的一条记录,有不少冗余数据)。out.print(JSONArray.fromObject(list));得到的JSON串:
[{"campaignRuleArguments":[],"campaignRules":[],"campaignValuePacks":[],"companyId":4404,"completedAt":null,"createTime":{"date":23,"day":1,"hours":15,"minutes":55,"month":5,"seconds":19,"time":1403510119000,"timezoneOffset":-480,"year":114},"creator":"","currentScannedAt":{"date":9,"day":3,"hours":17,"minutes":55,"month":6,"seconds":23,"time":1404899723000,"timezoneOffset":-480,"year":114},"customerEvent":false,"description":"某些商品具有很强的回购属性,如生鲜食品类,美发服务类等,你可以根据某一商品的回购周期,向购买了该商品的会员发送订单回购邮件。","emailClickNum":0,"emailOpenNum":1,"fromEmail":"hg2k@163.com","fromName":"66","id":340,"mainFilterCondition":null,"mainFilterConditions":[],"mainTimeCondition":null,"mainValue":"","messageId":22611,"name":"订单回购-22","orderEvent":true,"planId":19942,"replyEmail":"junzheng_126@126.com","scannedAt":{"date":9,"day":3,"hours":17,"minutes":55,"month":6,"seconds":23,"time":1404899723000,"timezoneOffset":-480,"year":114},"sendNum":1,"status":"TEST","statusCode":2,"storeId":37,"testEmail":"370049196@qq.com","totalIncome":0,"totalOrder":0,"type":"ORDER_FOLLOW_UP","typeCode":2,"updateTime":null}]


jQuery 解析时间代码:
if(data[i].createTime.time != null){
    var date = new Date(parseInt(data[i].createTime.time));
    alert(date.getFullYear()+"-" + (date.getMonth()+1) + "-" + date.getDate()+" "+date.getHours()+":"+date.getMinutes() + ":" + date.getSeconds());
}

StringBuffer拼串得到的JSON串(无冗余数据):
[{"id":340,"statusCode":2,"createTime":2014-06-23 15:55:19,"sendNum":1,"emailOpenNum":1,"emailClickNum":null,"totalOrder":null,"totalIncome":null,"messageId":22611,"planId":19942}]


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值