it-swarm.com.de

jQuery.ajax Erfolgsrückruffunktion wird nicht ausgeführt

Ich habe einen JavaScript-Ajax-Aufruf (jQuery.ajax), der die Erfolgsrückruffunktion nicht ausführt. 

$.ajax({
        url: target,
        contentType: 'application/json; charset=utf-8',
        type: 'POST',
        // type: 'GET',
        dataType: 'jsonp',
        error: function (xhr, status) {
            alert(status);
        },
        success: function (result) {
            alert("Callback done!");
            // grid.dataBind(result.results);
            // grid.dataBind(result);
        }
    });

Ich sehe in Firebug, dass die Anfrage gepostet wird und das korrekte Ergebnis in Bezug auf den Json wie erwartet zurückgegeben wird. Was ist falsch?

26

Ich hatte oft ähnliche Probleme und der Grund war meistens ein missgebildeter Json. Versuchen Sie, das Ergebnis als Textdatentyp abzurufen, um zu sehen, ob dies Ihr Problem ist.

Ich möchte auch fragen, ob Sie einen Parameter wie "& jsoncallback =?" Verwenden. in Ihrer URL, da Ihr Datentyp Jsonp anstelle von einfachem Json ist.

50
Cagdas

Ihr $.ajax-Aufruf mit dataType: 'jsonp' könnte in diesen Szenarien funktionieren:

  1. Sie rufen eine URL in derselben Domain Ihrer Seite an.
  2. Sie rufen eine URL aus Ihrer Domain Ihrer Seite an, die callback unterstützt.

Wenn Sie sich nicht in diesen beiden Fällen befinden, können Sie nichts tun, da Sie keine XmlHttpRequest-Aufrufe an verschiedenen Standorten durchführen können.

6
systempuntoout

Dies ist eine alte Frage, aber ich vermute, dass die Leute das immer noch treffen.

Ich habe einige Zeit dagegen gekämpft und schließlich aufgegeben und bin zu dem aufgeschobenen Modell gegangen. (Ich habe jQuery lange genug verwendet, damit ich immer noch auf die "alten" Gewohnheiten eingestellt war ...) Sobald ich zu einem aufgeschobenen Modell wechselte, begannen die Dinge zu funktionieren. Ich habe keine Ahnung, warum der alte Weg nicht funktioniert hat, aber das interessiert mich nicht mehr. (Diese Frage ist älter als das neue Modell.)

vgl. https://stackoverflow.com/a/14754681/199172

2
MikeBaz - MSFT

Sie müssen die async-Eigenschaft auf false gesetzt haben.

$.ajax({
        url: target,
        contentType: 'application/json; charset=utf-8',
        type: 'POST',
        // type: 'GET',
        dataType: 'jsonp',
        async = false,
        error: function (xhr, status) {
            alert(status);
        },
        success: function (result) {
            alert("Callback done!");
            // grid.dataBind(result.results);
            // grid.dataBind(result);
        }
    });
1
Thanh Nguyen

Dies ist gerade einem meiner Kollegen passiert, also würde ich meine Lösung auch hinzufügen.

Wir konnten sehen, dass der Ajax-Aufruf ausgeführt wurde, und die richtige Antwort in Fiddler (Status 200/vollständig gültiger JSON-Status) zurückkommen, aber es würde niemals den Fehler, Erfolg oder vollständige Rückrufe treffen. Das Hinzufügen von async: false zum ajax-Aufruf würde dazu führen, dass dies funktioniert, aber das war nicht die richtige Lösung. Wenn Sie direkt nach dem Ajax-Aufruf einen Alarm platzieren (ohne async: false) und einige Sekunden warten, nachdem der Alarm angezeigt wurde, müssen die Ajax-Callbacks irgendwie funktionieren. Sehr seltsam in der Tat ...

Es stellte sich heraus, dass die Funktion mit dem Ajax-Aufruf an eine Eingabe von type = "submit" gebunden war, die die Quelle dieses ungeraden Verhaltens war. Wenn Sie die Eingabe in type = "button" ändern, wurde sie korrigiert.

0
Xorcist