0

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 イベントをいじるよりはましです。

4

2 に答える 2

2

dataFilter代わりにa を使用してみてください:

$.ajaxSetup({
    dataFilter: function(data,dataType) {
        if (dataType === "json") {
            return data.parseWithJSONDate();
        }
        return data;
    }
});

parseWithJSONDateこれは、メソッドが有効な json 文字列を返すことを前提としています。次に、単にjsondataType として使用します。

dataFilter メソッドの目的は、生の応答テキストをサニタイズすることです。これは、この状況に最適だと思います。有効な json を返す限り、jquery はそれを解析し、通常のように JavaScript オブジェクトに変換します。

new Date()編集:有効なjsonではないため、考えてみるとおそらく失敗するでしょう。

于 2012-06-21T17:45:18.043 に答える
0

最終的に、サーバー上ですべての日付を適切な形式に変換し、値をクライアントに返しました。最適なソリューションではありませんが、データフィルターを使用して変換する方法がわかりませんでした。

于 2012-07-12T03:40:26.943 に答える