[英]Parsing a Auto-Generated .NET Date Object with Javascript/JQuery
这里有一些帖子,但不是这个具体问题的答案。
服务器返回: "/Date(1304146800000)/"
我想根本不更改服务器端代码,而是解析.Net生成的JSON对象中包含的日期。 这似乎并不难,因为它看起来几乎就在那里。 然而,至少在这些论坛中似乎没有快速解决方案。
从之前的帖子中可以看出这可以使用REGEX完成,但REGEX和我是老对手,在酒吧里冷冷地凝视着对方。
这是唯一的方法吗? 如果是这样,有人可以指向我适合此任务的REGEX参考吗?
问候,
圭多
罗伯特的链接很好,但我们应该努力回答这里的问题,而不仅仅是发布链接。
这是一个快速的功能,可以满足您的需求。 http://jsfiddle.net/Aaa6r/
function deserializeDotNetDate(dateStr) {
var matches = /\/Date\((\d*)\)\//.exec(dateStr);
if(!matches) {
return null;
}
return new Date( parseInt( matches[1] ) );
}
deserializeDotNetDate("/Date(1304146800000)/");
由于您正在使用jQuery,我已经扩展了它的$.parseJSON()
功能,因此它可以自动,透明地为您进行此转换。
它不仅转换.net日期,也转换ISO日期。 所有主流浏览器中的原生JSON转换器都支持ISO日期,但它们只能以一种方式工作,因为JSON规范不支持日期数据类型。
在我的博客文章中阅读所有细节(不想复制博客文章内容,因为它太多了)并获取代码。 这个想法仍然是相同的:更改jQuery的默认$.parseJSON()
行为,以便它可以检测.Net和ISO日期,并在解析JSON数据时自动转换它们。 这样您就不必遍历解析的对象并手动转换日期。
$.parseJSON(yourJSONstring, true);
看到附加变量? 这可以确保所有现有代码按预期工作而不进行任何更改。 但是,如果您确实提供了附加参数并将其设置为true
,它将检测日期并相应地转换它们。
我头顶的两个主要原因。
当您不想实际覆盖现有的$.parseJSON()
功能时,您可以最小化地更改代码并将扩展名重命名为$.parseJSONwithdates()
,然后在解析JSON时始终使用您自己的函数。 但是,当您将Ajax调用设置为dataType: "json"
时,您可能会遇到问题dataType: "json"
会自动调用原始解析器。 如果使用此设置,则必须覆盖jQuery的现有功能。
好处是你不要改变原来的jQuery库代码文件。 您将此扩展名放在单独的文件中,并根据自己的意愿使用它。 有些页面可能会使用它,有些页面可能不会。 但是在任何地方使用它都是明智的,否则你会遇到同样的人为因素问题而忘记包含扩展名。 只需将您的扩展名包含在您可能正在使用的某个全局Javascript文件(或母版页/模板)中。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.