2012-04-04 8 views
2

Ab ASP.NET 3.5 sind alle AJAX-Antworten von ASP.NET Web Services innerhalb eines d Objekts enthalten.Wie erhält man eine konsistente AJAX-Antwort in allen .NET Frameworks?

Dies ist der Fall mit allen ASMX Dienstleistungen JSON über die 3.5 ASP.NET AJAX Extensions in ASP.NET serialisiert. Auch wenn Sie nur einen skalaren Rückgabewert wie eine Zeichenfolge, int oder boolean zurückgeben, wird das Ergebnis immer in das "d" eingeschlossen.

http://encosia.com/a-breaking-change-between-versions-of-aspnet-ajax/

daher mit Pre-3.5-Anwendungen würden Sie Folgendes tun:

success(data) 
{ 
    var value = data; 
} 

Mit 3.5+ Sie tun müssen:

success(data) 
{ 
    var value = data.d; 
} 

Ich habe ein Anwendung, die auf Post-3.5 und Pre-3.5 ausgeführt wird.

Wie kann ich meinen Code für diese Anwendungen konsistent halten?

Auch das wäre nützlich, damit ich den Code in den Anwendungen vor 3.5 nicht ändern muss, wenn sie aktualisiert werden.

Antwort

1

Sie eine kleine Hilfsfunktion haben könnte:

function GiveMeMyDamnData(data){ 
    if(data.d) 
     return data.d; 
    return data; 
} 

dann ...

success(data) 
{ 
    var value = GiveMeMyDamnData(data); 
} 

... müssen nur sicherstellen, dass Sie nie ein 'd' Eigenschaft in der AJAX-Antwort verwenden (sonst wird das verwirrend!

+0

+1 Ich mag das, aber daran zu denken, 'd' nicht die ganze Zeit zu benutzen, könnte teuer sein. Ich würde meine Schuhe vergessen, wenn sie nicht in meine Füße genäht wären: S – Curt

+0

@ Curt: Wenn Sie explizit 'd "Dann hast du es nicht verdient, dass dein Code funktioniert. 'd' ist kein passender Name für irgendein Eigentum ... überhaupt;) – musefan

+1

@Curt Ich mache mir mehr Gedanken, warum deine Schuhe in deine Füße eingenäht sind. – jadarnel27