Pertanyaan Bagaimana menangani kesalahan posting ajax jQuery saat menavigasi keluar dari halaman


Apakah ada cara untuk menangani kesalahan dari permintaan ajax dalam JQuery sedemikian rupa sehingga ketika pengguna menavigasi jauh dari halaman, kesalahan yang dihasilkan diabaikan?

$(document).ready(function() {
 $.ajax( {
    url:'/server/url/',
    type: 'POST',
    data: {some..data},
    success:function(response) { do stuff with response },
    error: function(xhr, textStatus, errorThrown) {
           // Don't raise this alert if user has navigated away from the page
           alert('error');
    }
});

Saya ingin tahu apakah ada yang tahu cara yang bersih untuk menangani ini? Saya tahu Anda bisa membuat beberapa logika dalam $(window).bind("beforeunload", function(){}) metode tetapi saya lebih suka jika ada cara untuk menangani situasi tanpa melakukan ini karena Chrome tampaknya tidak lagi mendukungnya. Apakah ada misalnya kesalahan khusus yang dikembalikan dalam kasus ini?

Terima kasih.


32
2018-02-10 14:06


asal


Jawaban:


Sepertinya jawaban untuk ini adalah memeriksa jqXHR.status. Itu Spesifikasi XMLHttpRequest menguraikan langkah-langkah ini untuk mengatur status:

Itu status atribut harus mengembalikan hasil menjalankan langkah-langkah ini:

  1. Jika negara adalah UNSENT atau OPENED, kembalikan 0 dan hentikan langkah-langkah ini.

  2. Jika bendera kesalahan diatur, kembalikan 0 dan hentikan langkah-langkah ini.

  3. Kembalikan kode status HTTP.1

CATATAN juga: Bendera kesalahan menunjukkan beberapa jenis kesalahan jaringan atau permintaan aborsi. Ini awalnya tidak disetel dan digunakan selama kondisi SELESAI.

Dari yang saya pahami, cek kode ini harus memperbaiki masalah:

    if (xhr.status == 0)
        alert('error');

1https://web.archive.org/web/20120204040047/http://www.w3.org/TR/XMLHttpRequest/#the-status-attribute


17
2018-02-10 15:29



Memeriksa status tidak berhasil untuk saya, tapi

// Ignore incomplete requests, likely due to navigating away from the page
if (jqXHR.readyState < 4) {
    return true;
} 

dalam penanganan kesalahan lakukan (4 sedang SELESAI).


12
2018-02-28 22:29



Saya harus menangani masalah ini juga beberapa kali.

Saya akan merekomendasikan untuk mengikat $(window).unload acara, pengaturan beberapa variabel di suatu tempat, seperti di ruang nama Anda (App.unloading = true) dan kemudian mengujinya dalam callback error ajax.

Lihat http://api.jquery.com/unload/


2
2018-02-10 15:02