2009-06-20 14 views
20

Desidero comprendere la chiamata AJAX di seguito, in termini di metodo complete();Usa successo() o completo() in chiamata AJAX

Se si sostituisce complete() con success(), ottengo un vuoto responseText proprio come con il metodo AJAX error().

D'altra parte, quando lascio il metodo complete() così com'è, tutto funziona come previsto.

E 'questo il success() restituisce prima di 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 + "<br>"); 
     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; 
}); 

risposta

12

"completato" viene eseguito quando la chiamata ajax è terminata. "successo" viene eseguito quando la chiamata ajax termina con un codice di risposta positivo.

+0

grazie, ma per essere chiari, devo usare il codice per eseguire sotto un'opzione completa e non in fase di successo. E l'opzione di errore funzionerà anche con l'opzione completa da sola? –

+0

o, suggerisce che non ottengo un responsecode di successo, strano? –

35

complete eseguito dopo la richiamata success o error.

Forse dovresti controllare anche le offerte del secondo parametro complete. È una stringa che regge il successo che ha avuto l'ajaxCall.

Le diverse callback sono descritti un po 'più in dettaglio qui jQuery.ajax(options)


Credo che vi siete persi il fatto che il complete e la funzione success (lo so API incoerente) ottenere dati diversi passati in. success ottiene solo i dati, complete ottiene l'intero oggetto XMLHttpRequest. Naturalmente non esiste la proprietà responseText sulla stringa di dati.

Quindi, se si sostituisce complete con success, è necessario sostituire anche data.responseText con data.

successo

La funzione viene passata due argomenti: I dati restituiti dal server , formattata in base al parametro 'dataType', e una stringa che descrive lo stato.

completa

La funzione viene passata due argomenti: l'oggetto XMLHttpRequest e una stringa che descrive il tipo di successo della richiesta.

Se è necessario accedere all'intero oggetto XMLHttpRequest nel callback di successo, suggerisco di provare questo.

var myXHR = $.ajax({ 
    ... 
    success: function(data, status) { 
     ...do whatever with myXHR; e.g. myXHR.responseText... 
    }, 
    ... 
}); 
+0

oops, il commento è arrivato allo stesso tempo Quindi, se ho capito bene. La funzione completa contiene tutte le informazioni di cui ho bisogno. Il successo contiene meno se non si superano due argomenti nella funzione. Spero di non diventare stupido, ma è completo come se avessi usato non abbastanza tutto il tempo? O è che il successo è più leggero ?? –

+0

Inoltre, oltre al mio ultimo commento, il mio codice verrà ancora inserito nell'errore. In breve, farà tutto senza alcun inconveniente se tralascio l'opzione di successo. Scusa se sembra che non lo capisco ancora. Mi confonde un po '. –

+0

Ho modificato la mia domanda per contenere il codice completo che ho usato Non dà alcun errore, ma probabilmente posso eliminare l'opzione di successo. Se il risultato è lo stesso. –

18

è che success() rendimenti prima di quanto complete()?

; il metodo AJAX success() viene eseguito prima del metodo complete().

seguito è un diagramma illustrante il flusso del processo:

AJAX call process flow diagram.

È importante notare che

  • Il success() (Event locale) viene chiamato solo se la richiesta ha avuto successo (nessun errore dal server, nessun errore con i dati).

  • D'altro canto, complete() (Evento locale) viene chiamato indipendentemente dal fatto che la richiesta abbia avuto esito positivo oppure no. Riceverai sempre un callback completo, anche per le richieste sincrone.

... ulteriori dettagli su AJAX Eventi here.

Problemi correlati