[英]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.