Wie kann ich interpretieren JSON von jQuery.ajax zurückgegeben und eine POST-Aktion mit?

StackOverflow https://stackoverflow.com/questions/612515

  •  03-07-2019
  •  | 
  •  

Frage

Ich habe folgenden jQuery-Code:

$.ajax({
    type: "POST",
    url: "Services/MyService.asmx/Select",
    dataType: "json",
    data: "{'data':'test'}",
    contentType: "application/json; charset=utf-8",
    success: function(msg){ 
                alert(msg); 
             },
    error: function(xhr){ alert(xhr.statusText);}                
});

Der Aufruf der Methode gibt folgende Möglichkeiten:

"{"FirstName":"James"}"

Wenn ich den Wert zurück, mein Alarm gibt den vollständigen JSON-String. Wenn ich versuche, alert(msg.FirstName) zu tun, erhalte ich "undefined".

Ich habe eine Menge von Beispielen unter Verwendung des getJSON () -Methode gesehen; aber ich habe keine Möglichkeit, zu verwenden, die für einen Postverb gesehen. Kann jemand mich in die richtige Richtung, wo ich falsch gehe? Auf der Grundlage der jquery Dokumentation sollte der Rückgabewert denselben Datentyp sein (json) so bin ich nicht sicher, was mir fehlt.

EDIT: Ich schaute auf meinen Dienst und es ist passend Beispiele, die ich in Bezug auf die Methodensignatur bin der Suche nach einem String zurück. Ich habe auch bestätigt, der Antworttyp ist application / json.

EDIT2: Aktualisiert die Antwort, die außerhalb Anführungszeichen enthalten. Ich verwende auch eine benutzerdefinierte Javascript die JSON-Serialisierung zu tun. Der Brauch Konverter dauert nur meine Objekteigenschaften (in diesem Fall Vornamen) und lädt sie und es ist Wert in eine Dictionary-Sammlung, die die ASP.Net AJAX Extensions v1.0 leicht serialisiert werden kann.

EDIT3: Mit Blick auf die Frage, die ich mit eval mit () (es verursachte einen Expected ";" Fehler), habe ich bemerkt, dass die json Eigenschaftsnamen wurden auch in Anführungszeichen eingeschlossen. Sobald ich die Zitate aus dem Eigenschaftsnamen (nicht den Wert) entfernt, eval () funktionierte wieder. Mit Blick auf die Server-Seite dieses Problems jetzt.

War es hilfreich?

Lösung

Die jQuery .ajax Nutzung wirkt solide. Wie werden Verifizieren Sie die Daten zurückgegeben? Firebug? Geiger? Da .asmx einen Web Service nicht zurück Daten wie {"FirstName":"James"}. Antworten aussehen wie:

{"d":{"FirstName":"James"}}

(Siehe http: //encosia.com/2008/03/27/using-jquery-to-consume-aspnet-json-web-services/ )

Für Ihre success Rückruf, versuchen Sie:

function(res) { alert(res.d.FirstName) }

Bearbeiten : Sah Ihr Updates und Kommentar re v1.0 des ASP.Net AJAX:

ich nicht sicher bin, wie v1.0 funktioniert WRT Ihre Antwort Serialisierung, aber meine Vermutung ist, wenn Sie Ihre eigenen benutzerdefinierten JSON Serialisierung in Ihrer WebService-Methode zu tun, kann die Antwort sein JSON serialisiert bekommen wieder . Sie sind also die Serialisierung zweimal.

Ich glaube, dass alle Komponenten, die Sie verwenden das tun, was sie sollen, dann ist es gerade jetzt Ihre success Rückruf manuell unserialize benötigt, da Sie Serialisierung manuell auf dem Server:

function(res) {
    res = eval('(' + res + ')');
    alert(res.FirstName);
}

Andere Tipps

IIRC können Sie die Zeichenfolge eval, und das Ergebnis wird das JSON-Objekt sein.

myJSON = eval (jsonString);

Sie können Ihre Post Variablen mit einem JSON-Objekt als zweiten Parameter definiert werden.

Beispiel:

$.getJSON("service.py",
    { foo: bar },
    function(data) {
        $.each(data, function() { // blah });
    }
);

EDIT: Ich sehe, was Sie jetzt bedeuten. Hat Ihr Service Rückkehr „etwas / json“ als MIME-Typ? Wenn man sich die Antwort-Header in Firebug suchen, sollte es in etwa so aussehen:

Content-Type    application/json; charset=utf-8

versuchen, etwas wie folgt aus:

 result = eval('(' + result.d + ')');

Sie können nicht $getJSON mit ASMX Dienstleistungen serialisiert durch System.Web.Extensions verwenden. Sie machen den Anruf richtig mit $.ajax().

Haben Sie versucht, Firebug mit einem Haltepunkt in dem Erfolg Handler zu setzen und Inspektion der msg Wert

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top