2016-11-16 7 views
0

Ich habe einen POST-Dienst im Back-End, der einen leeren Antworttext zurückgibt.Promise-Rückruf bei Jquery wird nie ausgeführt, wenn leere Antwort

Ich nenne den Dienst mit einem Ajax-Aufruf von jquery wie diese, die ein Versprechen zurück:

return $.when($.ajax({ 
    type: 'POST', 
    url: url, 
    beforeSend: (xhr) => { 
     xhr.setRequestHeader('Content-Type', 'application/json;charset=UTF-8') 
    }, 
    data: data, 
    dataType: 'json', 
    crossDomain: true 
})) 

Dann Aufruf der Methode:

myMethod(params).done(
    (response) => { 
    console.log(response) 
    } 
) 

So ist die Ajax-Aufruf gemacht wird, jedoch die done wird nie ausgeführt. Wenn der Server im Antworttext etwas zurückgibt, funktioniert es.

Nicht sicher, was ich vermisse.

+2

Sie brauchen '$ .when' nicht. Gib '$ .ajax (..) 'selbst zurück. – hindmost

+1

Sind Sie sicher, dass es kein 'fail()' zurückgibt? Vielleicht willst du '.always()'? – Liam

+0

Hinterm Ich möchte ein Versprechen. @Liam, könnte scheitern, aber getan, ist nicht das gleiche wie immer? – Pablo

Antwort

2

Jquery 1.9 behandelt JSON-AJAX-Anfragen mit einem leeren Ergebnis als Fehler.

Die JSON-Daten werden in einer strikten Weise analysiert; Jegliche fehlerhafte JSON wird zurückgewiesen und ein Parse-Fehler wird ausgelöst. Ab jQuery 1.9 wird eine leere Antwort ebenfalls abgelehnt. Der Server sollte stattdessen eine Antwort von null oder {} zurückgeben. (Siehe json.org Weitere Informationen zur richtigen JSON Formatierung.)

sollten Sie entweder behandeln dies als fail Fall nicht verwenden, um den json Typen oder fixieren Sie Ihre Server nicht leer Antworten zu senden, wenn json angefordert wird.

+0

welcher sollte der Typ für diese leere Antwort sein? – Pablo

+1

Wenn Sie den Server steuern, würde ich es ändern, um '{}' zurückzugeben. Ansonsten, eine 'dataFilter'-Funktion in Ihrer Ajax-Anfrage, die nach einer leeren Antwort sucht und sie durch' {} '? –

+0

Ich kontrolliere es nicht. Ich kann den Dateityp nicht auf 'Text' oder etwas ähnliches ändern? – Pablo

Verwandte Themen