JSON 応答を解析して、ASP.NET の日付を JavaScript の日付に変換しようとしています。
実際の応答は次のようになります。
{"Id":1,"Title":null,"Description":null,"Content":null,"PropagateModel":false,"Status":0,"ComponentPublishDate":"\/Date(1340299653555)\/"}
\/Date(1340299653555)\/
からへの正規表現変換を行うために、javascript 文字列オブジェクトを拡張しました。new Date(1340298914781)
String.prototype.parseWithJSONDate = function () {
return this.replace(/\/Date\((.*?)\)\//gi, 'new Date($1)');
};
それから私はコンバータfilter を使用して実際の解析を行います。
$.ajaxSetup({
dataFilter: function(data, dataType) {
if (dataType === "json") {
return data.parseWithJSONDate();
}
return data;
}
});
このコンバーターは機能しません。私が最初に抱えた問題は、コンバーターが戻った後、応答が何らかの形で破損することでした。関数の最後でそのJSON.parse
ように呼び出すことで修正しました。return JSON.parse(res)
なぜ、既に JSON 文字列になっている文字列を解析する必要があるのでしょうか??
2 番目の問題は、実際の正規表現が値を置き換えているように見えないことです。奇妙なことに、サンプルの JSON 文字列で関数の外でテストしたところ、問題なく動作しました。
誰でも何か提案できますか?ありがとう!
UPDATE 1 最初の質問に対する答えを見つけたと思います。私のコンバーターは、json および text データ型に対して実行されていました。これが、戻り値を JSON に明示的に変換しなければならなかった理由である可能性があります。コンバーターからテキスト データ型を削除し、それに応じて残りのコードを更新しました。
UPDATE 2 日付がフォーマットされた文字列である新しいビューモデルを作成することになりました。世界で最高のものではありませんが、jQuery ajax イベントをいじるよりはましです。