2016-09-30 2 views
0

Ich mache AJAX-Anfrage an meine ASP.NET MVC-Anwendung mit jQuery, und in "Erfolg" Handler erhalte ich ein Objekt mit Daten im ISO-8601-Format serialisiert mit Json.NET :

response = { 
    FirstDate: "2001-11-11T00:00:00Z" 
    SecondDate: "2002-22-22T00:00:00Z" 
} 

Danach habe ich alle diese Daten manuell konvertieren müssen, bevor ich sie verwenden können:

var firstParsedDate = new Date(response.MyDate); 
var secondParsedDate = new Date(response.MyDate); 

gibt es eine Möglichkeit, eine Antwort Objekt erhalten mit bereits Daten analysiert? Wenn nicht, können sie alle auf einmal analysiert werden?

+0

Wie würden Sie feststellen, ob eine bestimmte Eigenschaft ein Datum ist oder nicht? JavaScript sieht sie nur als Zeichenfolgen. Wenn Sie das herausfinden können, könnten Sie etwas mit den Einstellungen von jQuery ['ajax'] (http://api.jquery.com/jQuery.ajax/) tun, wahrscheinlich mit der Eigenschaft' converters', in der Sie die Verwendung von ' 'jQuery.parseJSON'. –

+0

@MikeMcCaughan, ich kann alle Zeichenfolgen in der Antwort mit ISO 8061 Regex testen. Wenn diese Konvertierung mit Ajax-Einstellungen durchgeführt werden kann, wäre dies eine gute Lösung. –

Antwort

1

Sie könnten mit jQuerys each() eine Funktion für jeden Wert ausführen.
Zu Demonstrationszwecken habe ich toString() hinzugefügt.

response = { 
 
    FirstDate: "2001-11-11T00:00:00Z", 
 
    SecondDate: "2002-22-22T00:00:00Z" 
 
} 
 

 
$.each(response,function(i, v) { 
 
    response[i]=new Date(v).toString(); 
 
}); 
 

 
console.log(response);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>


Hier ist ein alternatives Beispiel map() verwendet falsche Daten ausschließt:

var response = { 
 
    FirstDate: "2001-11-11T00:00:00Z", 
 
    SecondDate: "2002-22-22T00:00:00Z", 
 
    ThirdDate: "1995-08-22T05:23Z", 
 
    }, 
 

 
    valid_dates = $.map(response, function(v, i) { 
 
    return Date.parse(v) ? new Date(v).toString() : null; 
 
    }); 
 

 
console.log(valid_dates);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+1

Wenn in der Antwort irgendwelche Nicht-Datum-Eigenschaften vorhanden sind, werden diese auf ein ungültiges Date-Objekt gesetzt ... –

1

Sie eine erneute machen könnte kursive Funktion, die das Antwortobjekt durchläuft und alle Strings, die dem ISO 8601-Format entsprechen, automatisch in Date-Objekte konvertiert. So etwas sollte funktionieren:

function replaceIso8601StringsWithDates(obj) 
{ 
    if (obj !== null && typeof (obj) === "object" && !Array.isArray(obj)) { 
     for (var prop in obj) { 
      if (isIso8601String(obj[prop])) { 
       obj[prop] = new Date(obj[prop]); 
      } 
      else { 
       replaceIso8601StringsWithDates(obj[prop]); 
      } 
     } 
    } 
} 

var iso8601Regex = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{1,6})?(Z|[+-]\d{2}:\d{2})$/; 
function isIso8601String(val) { 
    return typeof (val) === "string" && iso8601Regex.test(val); 
} 

Dann in Ihrem success Handler Sie müssen nur die Funktion aufzurufen:

function success(data, status, xhr) { 
    replaceIso8601StringsWithDates(data); 
    ... 
} 
Verwandte Themen