ตรวจสอบว่าข้อผิดพลาด $ .ajax หมดเวลาหรือไม่


205

jQuery.ajax( settings )ฉันใช้ความมหัศจรรย์ของ

อย่างไรก็ตามฉันสงสัยว่าใครเล่นด้วยการตั้งค่าการหมดเวลามาก?

ฉันรู้ว่ามันเป็นเรื่องของการบอกเวลาท้องถิ่นเพื่อขอ แต่มันสามารถกระตุ้นอะไรได้บ้างหากถึงเวลาหมด หรือเพียงแค่หยุดฟังเพื่อรับการตอบกลับ

การอ่านไซต์ jQuery ฉันเห็นว่าไม่มีข้อโต้แย้งใด ๆ ผ่านไปดังนั้นดูเหมือนว่าจะเป็นการตั้งค่าที่เรียบง่ายพร้อมความสามารถเดียว ซึ่งเป็นเรื่องปกติ

แต่ฉันต้องการที่จะเรียกการแจ้งเตือนหรือฟังก์ชั่นบางอย่างถ้าถึงเวลาหมด ฉันเห็นว่าการตั้งค่าข้อผิดพลาดไม่ได้รับการกระตุ้นในกรณีนี้

นี่คือตัวอย่างของฉัน:

$("form#testform").submit(function(){ 

 var allFormValues = $("form#testform").serialize(); 

   $.ajax({
    cache:false,
    timeout:8000,  // I chose 8 secs for kicks
    type:"POST",
    url:"someurl.php",
    data:allFormValues,
    error:function(){ alert("some error occurred") },
    success:function(response){ alert(response); }
   });

});

ไม่มีใครรู้วิธีการทำงานมากขึ้นด้วยการหมดเวลา?

คำตอบ:


356

หากตัวจัดการเหตุการณ์ข้อผิดพลาดของคุณใช้อาร์กิวเมนต์สามตัว (xmlhttprequest, textstatus และ text) เมื่อหมดเวลาใช้งานสถานะ arg จะเป็น 'หมดเวลา'

ตามเอกสาร jQuery :

ค่าที่เป็นไปได้สำหรับอาร์กิวเมนต์ที่สอง (นอกเหนือจาก null) คือ "หมดเวลา", "ข้อผิดพลาด", "notmodified" และ "parsererror"

คุณสามารถจัดการข้อผิดพลาดของคุณตามนั้น

ฉันสร้างซอนี้เพื่อแสดงให้เห็นถึงสิ่งนี้

$.ajax({
    url: "/ajax_json_echo/",
    type: "GET",
    dataType: "json",
    timeout: 1000,
    success: function(response) { alert(response); },
    error: function(xmlhttprequest, textstatus, message) {
        if(textstatus==="timeout") {
            alert("got timeout");
        } else {
            alert(textstatus);
        }
    }
});​

ด้วย jsFiddle คุณสามารถทดสอบการโทร ajax ได้ - มันจะรอ 2 วินาทีก่อนตอบกลับ ฉันตั้งค่าการหมดเวลาไว้ที่ 1 วินาทีดังนั้นจึงควรเกิดข้อผิดพลาดและส่งกลับข้อความของ 'หมดเวลา' กลับไปยังตัวจัดการข้อผิดพลาด

หวังว่านี่จะช่วยได้!


3
ดีใจที่มันใช้งานได้! ใช่พวกเขาซ่อนค่าสถานะเหล่านั้นในเอกสาร
David Hoerster

102
พวกเขาซ่อนเอกสารไว้มากมาย
Aaron

4
@JochemKuijpers Fiddler จะรอ 2 วินาทีเพื่อให้หมดเวลา 1 วินาที อ่าน ....
Rickjaah

2
คุณช่วยอธิบายว่า x, t, m vars คืออะไร?
บาร์ต

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