Diferença entre .success () e .complete ()?

103

A partir de jQuery 1.5, métodos AJAX tudo do jQuery retornar um jqXHRobjeto que fornece .error(), .success()e .complete()métodos.

Qual é a diferença entre .success()e .complete()?

Rendicahya
fonte
2
@nix, você tem um link que descreve as coisas obsoletas em mais detalhes?
neoneye
@neoneye Ctrl + F "aviso de descontinuação" em api.jquery.com/jQuery.ajax/
ThatGuy

Respostas:

223

.success()só é chamado se o seu servidor web responder com um 200 OKcabeçalho HTTP - basicamente quando está tudo bem.

No entanto, sempre.complete() será chamado, não importa se a chamada ajax foi bem-sucedida ou não - talvez tenha gerado erros e retornado um erro - .complete () ainda será chamado.

Vale a pena mencionar que .complete()será chamado depois que .success() for chamado - se for importante para você.

Arnorhs
fonte
11

success()é chamado quando o servidor retorna um código de status 200, complete()é chamado sempre que a solicitação é concluída, independentemente do resultado.

CarlosZ
fonte
1

success()chamado quando o servidor retorna código de status 200 , complete()é chamado depois success(). e eu vejo alguma diferença:

Em success()você não pode obter a string de resposta xml que você usa $.ajax()e define, dataType:xml mas em complete()você pode obter o formato de string do documento xml lido usando

$.ajax({
url:'??',
dataType:'xml',
oncomplete: function(data,status){
console.log(data.responseText);
}
})
Mostafa
fonte
0

success()é chamado quando o servidor retorna success status code, como: 200, 201etc.

complete()é chamado sempre que a solicitação é concluída. (não importa, é uma resposta de sucesso / erro do servidor.)


Assim,

  • quando há successresposta do servidor: complete()e success()é chamado.
  • quando há errorresposta do servidor: complete()e error()é chamado.

Com que propósito você pode usar complete(): suponha que beforeSend()você mostre um loader image, e complete()que possa esconder isso loader image.

Mahfuz
fonte