服务器端对一个装有 Person 类型的强类型集合进行了序列化,如下格式
客户端采用Jquery 的ajax 方法接收 json 数据源
$.ajax({
url: 'ajax.aspx',
type: 'post',
dataType: 'json',
data: 'ajaxType=list',
success: function (json) {
for (var i = 0; i < json.length; i++) {
var tr = '<tr><td>' + json[i].Name + '</td><td>' + json[i].Age + '</td><td>' + json[i].Six + '</td><td>' + json[i].Birthday + '</td></tr>';
$("#table").append(tr);
}
}
});
上面的方法首先标识接收数据类型 dataType:'json'
页面上有个ID为 table 的table,我将解析出的json数据Append到table中,运行输出结果如下.
10个Person对象都显示在了table中,但是你会发现 生日这一列js解析成了字符串
回头看下json中 生日这列序列号后的字符串是:"\/Date(1352440747528+0800)\/" 这确实是个UTC时间,
1352440747528 表示 1970年1月1日以来的毫秒数,+0800(或者-0800) +,- 符号加 4位数字表示东/西时区
但是js脚本并不会把上面的时间字符串转化为时间类型,必须我们手动去处理一下.
解决方案:替换字符串
ajax接收解析Birthday时,需要替换一下字符,如下代码
将
json[i].Birthday 用 eval_r(json[i].Birthday.replace(/\/Date\((\d+)\+\d+\)\//gi, "new Date($1)"))代替.
运行后结果:
姓名 | 年龄 | 性别 | 生日 |
xxxx0 | 20 | 女 | Wed Oct 31 16:38:35 UTC+0800 2012 |
xxxx1 | 21 | 男 | Thu Nov 1 16:38:35 UTC+0800 2012 |
xxxx2 | 22 | 女 | Fri Nov 2 16:38:35 UTC+0800 2012 |
xxxx3 | 23 | 男 | Sat Nov 3 16:38:35 UTC+0800 2012 |
xxxx4 | 24 | 女 | Sun Nov 4 16:38:35 UTC+0800 2012 |
xxxx5 | 25 | 男 | Mon Nov 5 16:38:35 UTC+0800 2012 |
xxxx6 | 26 | 女 | Tue Nov 6 16:38:35 UTC+0800 2012 |
xxxx7 | 27 | 男 | Wed Nov 7 16:38:35 UTC+0800 2012 |
xxxx8 | 28 | 女 | Thu Nov 8 16:38:35 UTC+0800 2012 |
xxxx9 | 29 | 男 | Fri Nov 9 16:38:35 UTC+0800 2012 |
看了后一样纠结,这样的时间类型并不是我们需要的,多希望转化成 2012-10-31-16:39:39 这样的时间格式,看来我们还需要一个函数把
Wed Oct 31 16:38:35 UTC+0800 2012 这样的时间转化为
2012-10-31-16:39:39
方法网上就有现成的,下面贴出来
function utcToDate(utcCurrTime) {
utcCurrTime = utcCurrTime + "";
var date = "";
var month = new Array();
month["Jan"] = 1;
month["Feb"] = 2;
month["Mar"] = 3;
month["Apr"] = 4;
month["May"] = 5;
month["Jun"] = 6;
month["Jul"] = 7;
month["Aug"] = 8;
month["Sep"] = 9;
month["Oct"] = 10;
month["Nov"] = 11;
month["Dec"] = 12;
var week = new Array();
week["Mon"] = "一";
week["Tue"] = "二";
week["Wed"] = "三";
week["Thu"] = "四";
week["Fri"] = "五";
week["Sat"] = "六";
week["Sun"] = "日";
str = utcCurrTime.split(" ");
date = str[5] + "-";
date = date + month[str[1]] + "-" + str[2] + "-" + str[3];
return date;
}
那么下一步就在输出生日的地方再调用一下这个函数就ok了
将
eval_r(json[i].Birthday.replace(/\/Date\((\d+)\+\d+\)\//gi, "new Date($1)"))
用 utcToDate(eval_r(json[i].Birthday.replace(/\/Date\((\d+)\+\d+\)\//gi, "new Date($1)"))) 代替
运行结果:
姓名 | 年龄 | 性别 | 生日 |
xxxx0 | 20 | 女 | 2012-10-31-16:42:56 |
xxxx1 | 21 | 男 | 2012-11-1-16:42:56 |
xxxx2 | 22 | 女 | 2012-11-2-16:42:56 |
xxxx3 | 23 | 男 | 2012-11-3-16:42:56 |
xxxx4 | 24 | 女 | 2012-11-4-16:42:56 |
xxxx5 | 25 | 男 | 2012-11-5-16:42:56 |
xxxx6 | 26 | 女 | 2012-11-6-16:42:56 |
xxxx7 | 27 | 男 | 2012-11-7-16:42:56 |
xxxx8 | 28 | 女 | 2012-11-8-16:42:56 |
xxxx9 | 29 | 男 | 2012-11-9-16:42:56 |
ok ,这样的时间就是我们需要的