Różnica między .success () i .complete ()?

103

Jak jQuery 1.5, wszystkie metody AJAX jQuery zwraca jqXHRobiekt, który zapewnia .error(), .success()i .complete()metod.

Jaka jest różnica między .success()i .complete()?

Rendicahya
źródło
2
@nix. Czy masz link, który bardziej szczegółowo opisuje przestarzałe elementy?
neoneye
@neoneye Ctrl + F „powiadomienie o wycofaniu” na api.jquery.com/jQuery.ajax/
ThatGuy

Odpowiedzi:

223

.success()jest wywoływany tylko wtedy, gdy serwer WWW odpowie 200 OKnagłówkiem HTTP - w zasadzie, gdy wszystko jest w porządku.

Jednak .complete()będzie zawsze sprawdzony bez względu na to, czy wywołanie ajax był udany, czy nie - może to wyprowadzane błędy i zwróciło błąd - .complete () nadal będzie sprawdzony.

Warto wspomnieć, że .complete()zadzwonimy po .success() Twoim wezwaniu - jeśli ma to dla Ciebie znaczenie.

arnorhs
źródło
11

success()jest wywoływana, gdy serwer zwraca kod stanu 200, complete()jest wywoływana zawsze po zakończeniu żądania, bez względu na wynik.

CarlosZ
źródło
1

success()wywoływana, gdy serwer zwróci kod statusu 200 , complete()jest wywoływana po success(). i widzę różnicę:

Na success()nie możesz uzyskać ciągu odpowiedzi xml, który otrzymujesz $.ajax()i ustawisz dataType:xml Ale w complete()możesz uzyskać format ciągu odczytanego dokumentu xml używając

$.ajax({
url:'??',
dataType:'xml',
oncomplete: function(data,status){
console.log(data.responseText);
}
})
Mostafa
źródło
0

success()jest wywoływana, gdy powraca serwera success status code, takich jak: 200, 201etc.

complete()jest wywoływana zawsze po zakończeniu żądania. (nieważne, jest to odpowiedź serwera na sukces / błąd).


Więc,

  • gdy jest successodpowiedź z serwera: complete()i success()jest wywoływana.
  • gdy jest errorodpowiedź z serwera: complete()i error()jest wywoływana.

W jakim celu możesz użyć complete(): przypuśćmy, beforeSend()że pokazujesz a loader image, aw complete()możesz to ukryć loader image.

mahfuz
źródło