Utilisez success () ou complete () dans un appel AJAX

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 que complete() ?

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:

Diagramme de flux de processus d'appels AJAX.

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.