jQuery.ajax() feuert weder success() noch error()



  • Ich versuche einen ganz normalen Ajax-Request abzusetzen, aber keiner der alerts in success oder error werden ausgeführt. Die Requests kommen beim Webserver an und werden auch regulär beantwortet (sieht man auch in den Network-Logs von Firefox und Chrome), aber anderweitig passiert nichts.
    Ähnliches Verhalten kenne ich schon bei Crossdomain-POSTs, aber das hier ist weder ein Crossdomain-Request (das alles läuft auf localhost:8080) noch ein POST.
    Der Aufruf sieht so aus:

    $.ajax({url: "/call?q="+q, type: "GET", dataType: "text", async: false, cache: false, success: function(data) {alert("success");}, error: function(a,status) {alert("error");}});
    

    Was läuft da schief?



  • Guck halt in Firebug oder Chrome DevTools, was tatsächlich im Browser passiert. Geht ein Request raus? Kommt eine Response zurück? Alles andere wäre rätselraten.



  • Ja, man sieht in Firebug & Co, dass Requests rausgehen und Responses zurückkommen. Trotzdem wird keiner der beiden Funktionen aufgerufen.


  • Mod

    Warum verwendest du async:false ?
    1. solltest du das nie nie nie machen und 2. ists eh deprecated.

    Probier das ganze mal mit einem async ajax call (das a in ajax steht btw fuer async ;))



  • ruft man denn so ajax auf?? blabla.php?id=1 ???

    macht man es nicht so: ajax(source.php, { id: 1 }, ...)

    vielleicht is das der fehler



  • ich123312 schrieb:

    ruft man denn so ajax auf?? blabla.php?id=1 ???

    macht man es nicht so: ajax(source.php, { id: 1 }, ...)

    vielleicht is das der fehler

    Man kann die URL als ersten Parameter übergeben, aber das Objekt enthält in jedem Fall Optionen für jQuery, keine GET-Parameter.

    Shade Of Mine schrieb:

    Warum verwendest du async:false ?
    1. solltest du das nie nie nie machen und 2. ists eh deprecated.

    async: false verwende ich, da ich eine API implementiere und den "Rückgabewert" des Calls sofort meinerseits in der Funktion zurückgeben muss. Ich weiß nicht, wie ich es anders lösen soll, wenn ich die API beibehalten möchte.

    Im Prozess des Erstellens eines Minimalbeispiels habe ich auch das Problem gefunden und zwar hat ein verwendetes Framework es für notwendig gehalten, XMLHttpRequest zu überschreiben um einheitliches Verhalten auf allen Browsern zu schaffen. Offenbar hat es dabei aber etwas kaputtgemacht oder jQuery erwartet das aus Sicht des Frameworks "falsche" Verhalten vom Browser.
    Mit so einer Sauerei hatte ich nicht gerechnet, aber ohne klappt es nun.


  • Mod

    async:false lockt den ganzen Browser.
    Das willst du nicht.



  • Will ich auch nicht, aber das Design der API ist synchroner Natur, daran kann ich nichts ändern.
    Es wäre wohl möglich, mithilfe von Threads einen asynchronen Wrapper um die API zu schreiben.
    Evtl. geht das in Javascript mit web workers. Damit habe ich mich aber noch nicht näher beschäftigt
    und leider werden sie vom Android-Browser noch nicht unterstützt.


  • Mod

    Es ist idR kein Problem eine synchrone API aynchron zu verwenden. Ein Problem ist nur wenn man es anders herum machen will.


Anmelden zum Antworten