ใครสามารถช่วยฉัน?
ผมไม่สามารถที่จะเข้าใจความแตกต่างระหว่างsuccessและของ.done()$.ajax
ถ้าเป็นไปได้โปรดยกตัวอย่าง
ใครสามารถช่วยฉัน?
ผมไม่สามารถที่จะเข้าใจความแตกต่างระหว่างsuccessและของ.done()$.ajax
ถ้าเป็นไปได้โปรดยกตัวอย่าง
คำตอบ:
กล่าวโดยย่อคือการแยกฟังก์ชันการเรียกกลับความสำเร็จจากฟังก์ชัน ajax ดังนั้นในภายหลังคุณสามารถเพิ่มตัวจัดการของคุณเองได้โดยไม่ต้องแก้ไขโค้ดดั้งเดิม (รูปแบบผู้สังเกตการณ์)
โปรดดูข้อมูลโดยละเอียดเพิ่มเติมจากที่นี่: https://stackoverflow.com/a/14754681/1049184
success: ใช้เป็นพารามิเตอร์และ.success()เป็นวิธีการในไฟล์jqXHR. หลังกำลังจะเลิกใช้งาน แต่ก่อนหน้านี้คือสิ่งที่ OP กำลังถามถึง
successจะเริ่มทำงานก็ต่อเมื่อการเรียก AJAX สำเร็จนั่นคือส่งคืนสถานะ HTTP 200 ในที่สุด errorจะเริ่มทำงานหากล้มเหลวและcompleteเมื่อคำขอเสร็จสิ้นโดยไม่คำนึงถึงความสำเร็จ
ใน jQuery 1.8 บนjqXHRวัตถุ (ส่งกลับโดย$.ajax) successถูกแทนที่ด้วยdone, errorมีfailและมีcompletealways
อย่างไรก็ตามคุณควรจะสามารถเริ่มต้นคำขอ AJAX ด้วยไวยากรณ์เก่าได้ สิ่งเหล่านี้จึงทำสิ่งที่คล้ายกัน:
// set success action before making the request
$.ajax({
url: '...',
success: function(){
alert('AJAX successful');
}
});
// set success action just after starting the request
var jqxhr = $.ajax( "..." )
.done(function() { alert("success"); });
การเปลี่ยนแปลงนี้เป็นความเข้ากันได้กับ jQuery 1.5 ของวัตถุรอการตัดบัญชี รอการตัดบัญชี (และตอนนี้Promiseซึ่งรองรับเบราว์เซอร์ดั้งเดิมเต็มรูปแบบใน Chrome และ FX) ช่วยให้คุณเชื่อมโยงการกระทำแบบอะซิงโครนัสได้:
$.ajax("parent").
done(function(p) { return $.ajax("child/" + p.id); }).
done(someOtherDeferredFunction).
done(function(c) { alert("success: " + c.name); });
successห่วงโซ่ของฟังก์ชั่นนี้เป็นง่ายต่อการรักษากว่าปิรามิดที่ซ้อนกันของการเรียกกลับที่คุณได้รับ
อย่างไรก็ตามโปรดทราบว่าdoneขณะนี้เลิกใช้แล้วโดยสนับสนุนPromiseไวยากรณ์ที่ใช้thenแทน:
$.ajax("parent").
then(function(p) { return $.ajax("child/" + p.id); }).
then(someOtherDeferredFunction).
then(function(c) { alert("success: " + c.name); }).
catch(function(err) { alert("error: " + err.message); });
นี่เป็นสิ่งที่ควรค่าแก่การนำมาใช้เนื่องจากasyncและawaitขยายสัญญาที่ปรับปรุงไวยากรณ์ (และการจัดการข้อผิดพลาด):
try {
var p = await $.ajax("parent");
var x = await $.ajax("child/" + p.id);
var c = await someOtherDeferredFunction(x);
alert("success: " + c.name);
}
catch(err) {
alert("error: " + err.message);
}
successใน jQuery 1.8 ที่ถูกแทนที่ด้วยdone. พวกเขาทำงานในลักษณะเดียวกัน แต่doneสอดคล้องกับส่วนที่เหลือของ jQuery มากกว่า
.doneเป็นช่วงต้น (และตอนนี้ทางตัน) แทงที่สิ่งที่กลายเป็นPromiseและตอนนี้มีการรองรับภาษาที่ค่อนข้างครอบคลุม ในโครงการใหม่ฉันจะใช้const response = await fetch(...)แทน
.success() จะถูกเรียกก็ต่อเมื่อเว็บเซิร์ฟเวอร์ของคุณตอบสนองด้วยส่วนหัว HTTP 200 OK - โดยทั่วไปเมื่อทุกอย่างเรียบร้อยดี
การเรียกกลับที่แนบมากับ done () จะเริ่มทำงานเมื่อการแก้ปัญหาที่เลื่อนออกไป การเรียกกลับที่แนบมากับ fail () จะเริ่มทำงานเมื่อการเลื่อนออกไปถูกปฏิเสธ
promise.done(doneCallback).fail(failCallback)
.done() has only one callback and it is the success callback
successคือการโทรกลับที่เรียกใช้เมื่อการร้องขอสำเร็จและเป็นส่วนหนึ่งของการ$.ajaxโทร doneเป็นส่วนหนึ่งของjqXHRวัตถุที่ส่งคืน$.ajax()และแทนที่successใน jQuery 1.8