Ich weiß, dass dies ein Missverständnis von mir ist und ich versuche zu lernen, was ich falsch mache, und ich könnte wirklich etwas Hilfe bitte verwenden.jQuery .done nicht wie erwartet
Ich habe eine Ajax-Anfrage, die erfolgreich ist und die Rückgabe von Daten gut. Die Api gibt einen Fehlercode zurück, und dann versuche ich eine Antwort basierend auf dem Code, den ich erhalten habe, zurückzugeben, außer dass die Funktion nur das zurückgibt, was der Ajax-Aufruf geliefert hat.
function getData(){
var promise = $.ajax({
url: 'api.php',
type: 'POST',
dataType: 'json'
});
return promise.done(function(data){
console.log(data);
if(data.errorCode === 0){
return data;
} else {
return 'failed';
}
});
}
$(document).ready(function(){
$('.btn').click(function(){
var apiData = getData();
console.log(apiData);
});
});
Also, wenn der api einen Fehlercode zurückgibt, der die Funktion getData nicht 0 ist, dann ist, sollte eine Reihe von ‚nicht bestanden‘ zurückzukehren, außer es das Datenelement zurückgibt. Ich weiß, dass der Code nicht 0 ist, weil die console.log zeigt, dass der Code 999 ist. Was mache ich falsch? Warum kann ich es nicht bekommen, um meine Kette von "gescheitert" zurückzugeben?
Beitrag, wie Sie getData verwenden. – dfsq
Was dfsq gesagt hat. Insbesondere, wenn Sie 'if (getData() ==" gescheitert ") und erwarten, dass dies darauf hinweist, dass es fehlgeschlagen ist, ist das das Problem. 'getData' gibt ein * Versprechen * (die jQuery-Variante) zurück, nicht" data "oder" failed "'. –
Sie können nie direkt von einem asynchronen Anruf zurückkehren. Versprechen sind keine Magie, die das weniger wahr macht. Der Aufrufer von 'getData()' hat nicht sofort Zugriff auf das Ergebnis. Am besten können Sie Ihre Logik von * innerhalb * eines Rückrufs fortsetzen. Ob Sie Promises verwenden oder nicht, das ist der Fall. –