C # โพสต์ AJAX ผลลัพธ์ json ที่ว่างเปล่า

Aug 19 2020

ฉันขอ 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

คำตอบ

Tanguy Aug 23 2020 at 17:01

ฉันแก้ไขปัญหาของฉันแล้ว แต่ยังมีความเข้าใจผิดอยู่

วิธีการของฉันส่งคืนข้อยกเว้นที่เกี่ยวข้องอย่างเป็นระบบกับบัญชีที่เรียกใช้เมธอด (นั่นคือเหตุผลว่าทำไมในการดีบักจึงใช้งานได้ในขณะที่บนเว็บเซิร์ฟเวอร์ไม่ได้เนื่องจากบัญชีที่ใช้แตกต่างกัน)

สิ่งที่แปลกคือวิธีการของฉันทำให้เกิดข้อยกเว้นฉันยังจัดการจับมันและส่งทางไปรษณีย์ แต่เมื่อตัวควบคุมจับข้อยกเว้นเธอจะว่างเปล่าหรือเป็นโมฆะ ฉันจะพยายามพิจารณาปัญหานี้ให้ละเอียดยิ่งขึ้น

เมื่อฉันแก้ไขปัญหาแล้วฉันพยายามเพิ่มระยะหมดเวลา 2 นาทีและไม่มีปัญหาใด ๆ เกิดขึ้น (ฉันคิดว่าในตัวอย่าง dotnetfiddle มีการกำหนดค่าที่แตกต่างจากของฉันนั่นคือเหตุผลที่ไม่มีข้อยกเว้นปรากฏขึ้น)