Tentukan apakah kesalahan $ .ajax adalah batas waktu

205

Saya menggunakan keajaiban jQuery.ajax( settings ).

Namun, saya bertanya-tanya apakah ada yang banyak bermain dengan pengaturan waktu habis?

Saya tahu ini pada dasarnya untuk menentukan waktu setempat untuk permintaan, tetapi dapatkah hal itu memicu apa pun jika batas waktu tercapai? Atau apakah itu hanya berhenti mendengarkan tanggapan?

Membaca situs jQuery, saya bisa melihat tidak ada argumen yang lewat, jadi sepertinya pengaturan sederhana dengan satu kemampuan. Itu baik saja.

Tapi, saya ingin memicu peringatan atau fungsi jika batas waktu tercapai. Saya dapat melihat bahwa pengaturan kesalahan tidak terpicu, dalam hal ini.

Ini cuplikan saya:

$("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); }
   });

});

Adakah yang tahu cara bekerja lebih banyak dengan batas waktu?

pembuat kopi
sumber

Jawaban:

356

Jika penangan peristiwa kesalahan Anda mengambil tiga argumen (xmlhttpeminta, status teks, dan pesan) ketika batas waktu terjadi, status arg akan menjadi 'batas waktu'.

Per dokumentasi jQuery :

Nilai yang mungkin untuk argumen kedua (selain nol) adalah "batas waktu", "kesalahan", "notmodified" dan "parsererror".

Anda dapat menangani kesalahan Anda sesuai dengan itu.

Saya menciptakan biola yang menunjukkan ini.

$.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);
        }
    }
});​

Dengan jsFiddle, Anda dapat menguji panggilan ajax - itu akan menunggu 2 detik sebelum merespons. Saya menempatkan pengaturan batas waktu 1 detik, sehingga harus keluar kesalahan dan mengirimkan status teks 'batas waktu' ke penangan kesalahan.

Semoga ini membantu!

David Hoerster
sumber
3
Senang itu berhasil! Ya, mereka semacam menyembunyikan nilai status itu dalam dokumentasi.
David Hoerster
102
Mereka banyak bersembunyi di dokumentasi.
Aaron
4
@JochemKuijpers Fiddler akan menunggu 2 detik, sehingga batas waktu 1 detik terpenuhi. Baca ....
Rickjaah
2
Bisakah Anda jelaskan apa itu x, t, m vars?
bart
3
(x) mlhttprequest, (t) extstatus, dan (m) esage
JupiterP5