Je veux comprendre l’appel AJAX ci-dessous, en termes de la méthode complete()
;
Lorsque je remplace complete()
par success()
, j’obtiens un responseText vide, comme avec la méthode AJAX error()
.
Par contre, lorsque je laisse la méthode complete()
telle quelle, tout fonctionne comme prévu.
Est-ce que success()
renvoie plus tôt que complete()
?
$("#formnaw").submit(function() { var fnc = invoerFnc.attr("value"); var vnaam = invoerVnaam.attr("value"); var anaam = invoerAnaam.attr("value"); var str1 = invoerStr1.attr("value"); var nr1 = invoerNr1.attr("value"); var pc1 = invoerPc1.attr("value"); var pl1 = invoerPl1.attr("value"); var tel1 = invoerTel1.attr("value"); var mob1 = invoerMob1.attr("value"); var em1 = invoerEm1.attr("value"); var goknop = $("#formnaw > .instelling_go"); //we deactiveren de submit knop tijdens het verzenden goknop.attr({ disabled: true }); goknop.blur(); //stuur de post variabelen naar livetabs.php $.ajax({ type: "POST", url: "registraties/instellingenact.php", data: "actie=wijzignaw&vnaam=" + vnaam + "&anaam=" + anaam + "&functie=" + fnc + "&straat=" + str1 + "&nr=" + nr1 + "&postcode=" + pc1 + "&plaats=" + pl1 + "&tel=" + tel1 + "&mob=" + mob1 + "&email=" + em1, timeout: 5000, success: function(data, textStatus) { alert('bij success'); //doe iets } //EINDE success , error: function(XMLHttpRequest, textStatus, errorThrown) { if (textStatus == 'timeout') { //doe iets } else if (textStatus == 'error') { //doe iets } //her-activeer de zend knop goknop.attr({ disabled: false }); } //EINDE error , complete: function(data) { updatelijst.append(data.responseText + "
"); if (data.responseText.indexOf("Fout") != -1) { $('#formnaw').find('td.foutnr1').prepend(data.responseText); } else { updatelijst.animate({ opacity: 'show' }, 1000, function() {}); } //her-activeer de zend knop goknop.attr({ disabled: false }); } //EINDE complete }); //EINDE ajax //we stoppen het standaard gedrag van een submit, zodat de pagina niet wordt vernieuwd. return false; });
complete
s’exécute après l’exécution du rappel d’ error
ou de success
.
Peut-être devriez-vous également vérifier les offres complete
du deuxième paramètre. C’est une chaîne contenant le type de succès qu’a eu ajaxCall.
Les différents rappels sont décrits un peu plus en détail ici jQuery.ajax( options )
Je suppose que vous avez oublié le fait que la fonction complete
et la fonction de success
(je sais que les API sont incohérentes) reçoivent différentes données. Le success
obtient uniquement les données, complete
obtient l’object XMLHttpRequest
complet. Bien sûr, il n’y a pas de propriété responseText
sur la chaîne de données.
Donc, si vous remplacez avec success
vous devez également remplacer data.responseText
par data
.
Succès
La fonction reçoit deux arguments: les données renvoyées par le serveur, formatées selon le paramètre ‘dataType’, et une chaîne décrivant l’état.
Achevée
La fonction reçoit deux arguments: l’object XMLHttpRequest et une chaîne décrivant le type de réussite de la demande.
Si vous avez besoin d’accéder à l’ensemble de l’object XMLHttpRequest
dans le rappel de réussite, je vous suggère d’essayer.
var myXHR = $.ajax({ ... success: function(data, status) { ...do whatever with myXHR; eg myXHR.responseText... }, ... });
Est-ce que
success()
renvoie plus tôt quecomplete()
?
Oui la méthode AJAX success()
s’exécute avant la méthode complete()
.
Vous trouverez ci-dessous un diagramme illustrant le déroulement du processus:
Il est important de noter que
success()
(événement local) n’est appelé que si la demande a abouti (pas d’erreur du serveur, pas d’erreur de données).
D’autre part, l’événement complete()
(Local Event) est appelé, que la requête aboutisse ou non. Vous recevrez toujours un rappel complet, même pour les demandes synchrones.
… plus de détails sur les événements AJAX ici .
“complete” s’exécute lorsque l’appel ajax est terminé. “success” s’exécute lorsque l’appel ajax se termine avec un code de réponse réussi.