ใครสามารถช่วยฉัน?
ผมไม่สามารถที่จะเข้าใจความแตกต่างระหว่าง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
และมีcomplete
always
อย่างไรก็ตามคุณควรจะสามารถเริ่มต้นคำขอ 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