C # โพสต์ AJAX ผลลัพธ์ json ที่ว่างเปล่า
ฉันขอ POST ajax เพื่อดำเนินการและส่งคืนผลลัพธ์โดยไม่ต้องโหลดหน้านี้ซ้ำ
สำหรับสิ่งนี้ฉันใช้ผลลัพธ์ JSON ปัญหาคือเมื่อการกระทำของฉัน "foo.DoSyncAction (id)" ใช้เวลาสักครู่ในการดำเนินการข้อความที่ส่งกลับจะเป็นโมฆะ
ตัวอย่างเช่นเมื่อมีการเพิ่มข้อยกเว้นข้อยกเว้นจะถูกจับได้ แต่ข้อความของเขาเป็นโมฆะ
สิ่งเดียวกันนี้เกิดขึ้นเมื่อไม่มีการโยนข้อยกเว้น "actionResult" เป็นโมฆะ
ถ้าฉันใช้การกระทำที่ใช้เวลาน้อยข้อความที่ส่งคืนจะไม่เป็นโมฆะหรือว่างเปล่า
และจะไม่เกิดขึ้นในโหมดดีบักข้อความที่ส่งกลับไปยังเพจของฉันไม่เป็นโมฆะ
ฉันคิดว่าฉันลืมหรือฉันทำอะไรผิด แต่ฉันคิดไม่ออกว่าอะไรผิด
[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);
}
}
คำถาม AJAX ของฉัน:
$.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);
}
});
นี่คือตัวอย่างของสถานการณ์ที่คล้ายกัน: dotnetfiddle.net/cG2L0uฉันใช้ตัวอย่าง Sagnalrac โดยรอ 10 วินาทีและเกิดปัญหาขึ้น ไม่แสดงรายการอีกต่อไปและ console.log ส่งคืนสตริงว่าง ฉันใช้ ASP MVC 5 กับ. NET 4.8
คำตอบ
ฉันแก้ไขปัญหาของฉันแล้ว แต่ยังมีความเข้าใจผิดอยู่
วิธีการของฉันส่งคืนข้อยกเว้นที่เกี่ยวข้องอย่างเป็นระบบกับบัญชีที่เรียกใช้เมธอด (นั่นคือเหตุผลว่าทำไมในการดีบักจึงใช้งานได้ในขณะที่บนเว็บเซิร์ฟเวอร์ไม่ได้เนื่องจากบัญชีที่ใช้แตกต่างกัน)
สิ่งที่แปลกคือวิธีการของฉันทำให้เกิดข้อยกเว้นฉันยังจัดการจับมันและส่งทางไปรษณีย์ แต่เมื่อตัวควบคุมจับข้อยกเว้นเธอจะว่างเปล่าหรือเป็นโมฆะ ฉันจะพยายามพิจารณาปัญหานี้ให้ละเอียดยิ่งขึ้น
เมื่อฉันแก้ไขปัญหาแล้วฉันพยายามเพิ่มระยะหมดเวลา 2 นาทีและไม่มีปัญหาใด ๆ เกิดขึ้น (ฉันคิดว่าในตัวอย่าง dotnetfiddle มีการกำหนดค่าที่แตกต่างจากของฉันนั่นคือเหตุผลที่ไม่มีข้อยกเว้นปรากฏขึ้น)