C # Posting hasil json kosong AJAX
Saya membuat permintaan ajax POST untuk melakukan tindakan dan mengembalikan hasil tanpa memuat ulang halaman.
Untuk ini saya menggunakan Hasil JSON, masalahnya adalah ketika tindakan saya "foo.DoSyncAction (id)" membutuhkan beberapa saat untuk dieksekusi, pesan yang dikembalikan adalah null.
Misalnya ketika pengecualian dimunculkan, pengecualian ditangkap, tetapi pesannya null.
Hal yang sama terjadi jika tidak ada pengecualian yang dilemparkan, "actionResult" adalah null.
Jika saya menggunakan tindakan yang membutuhkan waktu lebih sedikit, pesan yang dikembalikan tidak kosong atau kosong.
Dan itu tidak terjadi dalam mode debug, pesan yang dikembalikan ke halaman saya tidak null.
Saya pikir saya lupa atau saya melakukan sesuatu yang salah, tetapi saya tidak tahu apa yang salah.
[HttpPost]
public JsonResult SomeAction(int id)
{
try
{
Foo foo = new Foo();
var actionResult = foo.DoSyncAction(id);
return Json(new { ok = true, data = actionResult }, JsonRequestBehavior.AllowGet); ;
}
catch (Exception ex)
{
return Json(new { data = ex == null ? "null ex" : (string.IsNullOrEmpty(ex.Message) ? "this exception is empty" : ex.Message) }, JsonRequestBehavior.AllowGet);
}
}
Kueri AJAX saya:
$.ajax({
url: '@Url.Action("SomeAction", "MyController")',
dataType: 'json',
data: { id: myID },
type: 'POST',
success: function (response) {
if (response.ok) {
// When everything is ok
console.log(response.data);
} else {
// When an exception is thrown
console.log("An error occurred : " + response.data);
}
},
error: function (error) {
console.log("An error occurred : " + error.responseText);
}
});
Berikut adalah contoh situasi yang serupa: dotnetfiddle.net/cG2L0u Saya menggunakan contoh Sagnalrac dengan waktu tunggu 10 detik, dan masalah saya terjadi. Daftar item tidak lagi ditampilkan dan console.log mengembalikan string kosong. Saya menggunakan ASP MVC 5 dengan .NET 4.8
Jawaban
Saya telah memecahkan masalah saya, tetapi saya masih memiliki beberapa kesalahpahaman.
Metode saya mengembalikan pengecualian secara sistematis terkait dengan akun yang menjalankan metode (itulah mengapa dalam debug itu berfungsi, sedangkan di server web tidak, karena akun yang digunakan berbeda).
Hal yang aneh adalah bahwa metode saya membuat pengecualian, saya bahkan berhasil menangkapnya dan mengirimkannya melalui surat. Tapi ketika controller menangkap pengecualian, dia kosong atau null. Saya akan mencoba untuk melihat lebih dekat masalah ini.
Setelah saya memperbaiki masalah, saya mencoba menambahkan waktu tunggu 2 menit, dan tidak ada masalah yang terjadi (saya pikir dalam contoh, dotnetfiddle memiliki konfigurasi yang berbeda dari milik saya, itulah mengapa tidak ada pengecualian yang muncul).