Apakah ada cara saya bisa menampilkan pesan pengecualian khusus sebagai peringatan di pesan kesalahan jQuery AJAX saya?
Misalnya, jika saya ingin melempar pengecualian di sisi server melalui Struts oleh throw new ApplicationException("User name already exists");
, saya ingin menangkap pesan ini ('nama pengguna sudah ada') di pesan kesalahan jQuery AJAX.
jQuery("#save").click(function () {
if (jQuery('#form').jVal()) {
jQuery.ajax({
type: "POST",
url: "saveuser.do",
dataType: "html",
data: "userId=" + encodeURIComponent(trim(document.forms[0].userId.value)),
success: function (response) {
jQuery("#usergrid").trigger("reloadGrid");
clear();
alert("Details saved successfully!!!");
},
error: function (xhr, ajaxOptions, thrownError) {
alert(xhr.status);
alert(thrownError);
}
});
}
});
Pada peringatan kedua, saat saya mengingatkan kesalahan yang terjadi, saya mendapatkan undefined
dan kode statusnya adalah 500.
Saya tidak yakin di mana saya salah. Apa yang bisa saya lakukan untuk memperbaiki masalah ini?
jquery
ajax
custom-exceptions
Roman C
sumber
sumber
xhr.responseJSON
. : DPengendali:
Lihat skrip:
sumber
response.StatusCode = (int)HttpStatusCode.InternalServerError;
danresponse.StatusDescription = filterContext.Exception.Message;
Sisi server:
Sisi klien:
Penanganan Kesalahan Ajax Umum
Jika saya perlu melakukan beberapa penanganan kesalahan umum untuk semua permintaan ajax. Saya akan mengatur ajaxError handler dan menampilkan kesalahan pada div bernama errorcontainer di bagian atas konten html.
sumber
Anda perlu mengonversikan
responseText
ke JSON. Menggunakan JQuery:sumber
Jika melakukan panggilan ke asp.net, ini akan mengembalikan judul pesan kesalahan:
Saya tidak menulis sendiri semua formatErrorMessage tetapi saya merasa sangat berguna.
sumber
Inilah yang saya lakukan dan berfungsi sejauh ini dalam aplikasi MVC 5.
Jenis kembali pengontrol adalah ContentResult.
Dan di sisi klien inilah fungsi ajax terlihat
sumber
Jika seseorang ada di sini pada 2016 untuk jawabannya, gunakan
.fail()
untuk penanganan kesalahan seperti.error()
sudah usang pada jQuery 3.0Saya harap ini membantu
sumber
jqXHR.error()
sudah usang (sebenarnya dihapus) di jQuery 3.0, tetapierror
dansuccess
callback$.ajax()
tidak ditinggalkan, sejauh yang saya tahu.Solusi umum / dapat digunakan kembali
Jawaban ini disediakan untuk referensi di masa mendatang untuk semua orang yang menabrak masalah ini. Solusi terdiri dari dua hal:
ModelStateException
yang dilemparkan ketika validasi gagal di server (status model melaporkan kesalahan validasi ketika kami menggunakan anotasi data dan menggunakan parameter aksi pengontrol yang diketik dengan kuat)HandleModelStateExceptionAttribute
yang menangkap pengecualian khusus dan mengembalikan status kesalahan HTTP dengan kesalahan status model di tubuhIni menyediakan infrastruktur optimal untuk panggilan jQuery Ajax untuk menggunakan potensi penuh
success
danerror
penangannya.Kode sisi klien
Kode sisi server
Seluruh masalah dirinci dalam posting blog ini di mana Anda dapat menemukan semua kode untuk menjalankan ini di aplikasi Anda.
sumber
Saya menemukan ini bagus karena saya dapat mengurai pesan yang saya kirim dari server dan menampilkan pesan yang ramah kepada pengguna tanpa stacktrace ...
sumber
seperti
sumber
Ini mungkin disebabkan oleh nama bidang JSON yang tidak memiliki tanda kutip.
Ubah struktur JSON dari:
untuk:
sumber
Saya percaya penangan respons Ajax menggunakan kode status HTTP untuk memeriksa apakah ada kesalahan.
Jadi jika Anda hanya melempar pengecualian Java pada kode sisi server Anda tetapi kemudian respons HTTP tidak memiliki kode status 500 jQuery (atau dalam hal ini mungkin objek XMLHttpRequest ) hanya akan menganggap bahwa semuanya baik-baik saja.
Saya mengatakan ini karena saya punya masalah yang sama di ASP.NET di mana saya melempar sesuatu seperti ArgumentException ("Tidak tahu harus berbuat apa ...") tetapi penangan kesalahan tidak menembak.
Saya kemudian mengatur
Response.StatusCode
ke 500 atau 200 apakah saya memiliki kesalahan atau tidak.sumber
jQuery.parseJSON berguna untuk kesuksesan dan kesalahan.
sumber
Anda memiliki objek JSON dari pengecualian yang dilemparkan, di objek xhr. Gunakan saja
Objek JSON mengekspos dua properti lainnya: 'ExceptionType' dan 'StackTrace'
sumber
Fungsi ini pada dasarnya menghasilkan kunci API acak unik dan dalam kasus jika tidak maka kotak dialog pop-up dengan pesan kesalahan muncul
Di Halaman Tampilan:
Dari Controller:
Parameter panggilan balik opsional menentukan fungsi panggilan balik untuk dijalankan ketika metode load () selesai. Fungsi panggilan balik dapat memiliki parameter yang berbeda:
Suatu fungsi untuk dipanggil jika permintaan gagal. Fungsi menerima tiga argumen: Objek jqXHR (dalam jQuery 1.4.x, XMLHttpRequest), string yang menjelaskan jenis kesalahan yang terjadi dan objek pengecualian opsional, jika terjadi. Nilai yang mungkin untuk argumen kedua (selain nol) adalah "batas waktu", "kesalahan", "batalkan", dan "parsererror". Ketika kesalahan HTTP terjadi, errorThrown menerima bagian tekstual dari status HTTP, seperti "Tidak Ditemukan" atau "Kesalahan Server Internal." Pada jQuery 1.5, pengaturan kesalahan dapat menerima berbagai fungsi. Setiap fungsi akan dipanggil secara bergantian. Catatan: Handler ini tidak dipanggil untuk permintaan lintas domain dan permintaan JSONP lintas-domain.
sumber
sumber
Lempar pengecualian baru di server menggunakan:
Response.StatusCode = 500
Response.StatusDescription = ex.Message ()
Saya percaya bahwa StatusDescription dikembalikan ke panggilan Ajax ...
Contoh:
sumber
Meskipun sudah bertahun-tahun sejak pertanyaan ini diajukan, saya masih belum menemukan
xhr.responseText
jawaban yang saya cari. Ini mengembalikan saya string dalam format berikut:yang saya jelas tidak ingin ditampilkan kepada pengguna. Apa yang saya cari adalah sesuatu seperti di bawah ini:
xhr.responseJSON.message
memberi saya pesan yang tepat dari Objek Json yang dapat ditampilkan kepada pengguna.sumber
Jika ada formulir kirimkan dengan validasi
cukup gunakan sisa kode
... ... });
sumber
Pertama kita perlu mengatur <serviceDebug includeExceptionDetailInFaults = "True" /> di web.config:
Selain itu pada tingkat jquery di bagian kesalahan Anda perlu mengurai respons kesalahan yang berisi pengecualian seperti:
Kemudian menggunakan r.Message Anda dapat menampilkan teks pengecualian secara penuh.
Periksa kode lengkap: http://www.codegateway.com/2012/04/jquery-ajax-handle-exception-thrown-by.html
sumber