【发布时间】:2012-06-21 17:33:16
【问题描述】:
我正在尝试解析 JSON 响应以将 ASP.NET 日期转换为 javascript 日期。
实际响应如下:
{"Id":1,"Title":null,"Description":null,"Content":null,"PropagateModel":false,"Status":0,"ComponentPublishDate":"\/Date(1340299653555)\/"}
我扩展了 javascript 字符串对象以进行从 \/Date(1340299653555)\/ 到 new Date(1340298914781) 的正则表达式转换
String.prototype.parseWithJSONDate = function () {
return this.replace(/\/Date\((.*?)\)\//gi, 'new Date($1)');
};
然后我设置一个 converter 过滤器来进行实际的解析。
$.ajaxSetup({
dataFilter: function(data, dataType) {
if (dataType === "json") {
return data.parseWithJSONDate();
}
return data;
}
});
此转换器不起作用。我遇到的第一个问题是转换器返回后响应会以某种方式损坏。我通过在函数结束时调用JSON.parse 来解决这个问题,就像return JSON.parse(res) 一样。为什么我需要解析一个已经是 JSON 字符串的字符串??
第二个问题是实际的正则表达式似乎没有替换值。奇怪的是,我在函数之外对一个示例 JSON 字符串进行了测试,它工作得很好。
任何人都可以提出任何建议吗?谢谢!
更新 1 我想我找到了第一个问题的答案。我的转换器针对 json 和 text 数据类型运行。这可能是我必须将返回值显式转换为 JSON 的原因。我从转换器中删除了文本数据类型,并相应地更新了其余代码。
更新 2 我最终创建了一个新的视图模型,其中日期是一个格式化的字符串。这不是世界上最好的事情,但比搞砸 jQuery ajax 事件要好。
【问题讨论】:
-
你希望它返回一个 JSON 字符串,还是一个 JavaScript 对象。
-
根据我的理解,转换器已经接受了一个 json 字符串。所以,我假设它应该返回一个 json 字符串。至少这是我正在尝试做的。
-
默认情况下,
text json转换器返回一个表示 JSON 字符串的 JavaScript 对象。如果您只是想在 jQuery 评估它之前更改 json 字符串,请使用 dataFilter。 -
谢谢。我刚刚在您回复并删除文本数据类型之前发现了问题。我仍然无法替换日期。不确定我的正则表达式是否在某处轰炸或缺少其他东西。
标签: jquery ajax json asp.net-mvc-3 converter