ความแตกต่างระหว่าง .success () และ. complete ()?


103

ในฐานะของ jQuery 1.5 ทั้งหมดของ jQuery AJAX วิธีการส่งคืนjqXHRวัตถุที่ให้.error(), .success()และ.complete()วิธีการ

อะไรคือความแตกต่างระหว่าง.success()และ.complete()?


2
@nix คุณมีลิงค์ที่อธิบายรายละเอียดเกี่ยวกับสิ่งที่เลิกใช้แล้วหรือไม่?
neoneye

@neoneye Ctrl + F "ประกาศการเลิกใช้งาน" บน api.jquery.com/jQuery.ajax/
ThatGuy

คำตอบ:


223

.success()จะถูกเรียกก็ต่อเมื่อเว็บเซิร์ฟเวอร์ของคุณตอบสนองด้วย200 OKส่วนหัว HTTP - โดยทั่วไปเมื่อทุกอย่างเรียบร้อยดี

อย่างไรก็ตาม.complete()จะถูกเรียกเสมอไม่ว่าการโทรของ ajax จะประสบความสำเร็จหรือไม่ก็ตาม - บางทีอาจเกิดข้อผิดพลาดและส่งคืนข้อผิดพลาด - .complete () จะยังคงถูกเรียก

เป็นมูลค่าการกล่าวขวัญที่.complete()จะถูกเรียกหลังจาก .success()ถูกเรียก - ถ้ามันสำคัญกับคุณ


11

success()ถูกเรียกเมื่อเซิร์ฟเวอร์ส่งคืนรหัสสถานะ 200 complete()เรียกว่าเสมอเมื่อคำขอเสร็จสมบูรณ์ไม่ว่าผลลัพธ์จะเป็นอย่างไร


1

success()เรียกว่าเมื่อเซิร์ฟเวอร์ผลตอบแทน200รหัสสถานะเรียกว่าหลังจากcomplete() success()และฉันเห็นความแตกต่าง:

ในวันที่success()คุณไม่ได้รับการตอบสนองสตริง XML ที่คุณจะได้รับใช้$.ajax()และชุดdataType:xml แต่ในcomplete()คุณจะได้รับรูปแบบสตริงของเอกสาร XML Readed ใช้

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

0

success()จะถูกเรียกเมื่อผลตอบแทนเซิร์ฟเวอร์success status codeเช่น: 200, 201ฯลฯ

complete()จะถูกเรียกเสมอเมื่อคำขอเสร็จสมบูรณ์ (ไม่ว่าจะเป็นความสำเร็จ / การตอบสนองข้อผิดพลาดจากเซิร์ฟเวอร์)


ดังนั้น,

  • เมื่อมีการsuccessตอบสนองจากเซิร์ฟเวอร์: complete()และsuccess()ถูกเรียก
  • เมื่อมีการerrorตอบสนองจากเซิร์ฟเวอร์: complete()และerror()ถูกเรียก

เพื่อจุดประสงค์ใดที่คุณสามารถใช้ได้complete(): สมมติว่าbeforeSend()คุณแสดง a loader imageและcomplete()คุณสามารถซ่อนสิ่งนั้นloader imageได้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.