C # Post AJAX leeres JSON-Ergebnis

Aug 19 2020

Ich mache eine POST-Ajax-Anfrage, um eine Aktion auszuführen und ein Ergebnis zurückzugeben, ohne die Seite neu zu laden.
Dafür verwende ich ein JSON-Ergebnis. Das Problem ist, dass die zurückgegebenen Nachrichten null sind, wenn die Ausführung meiner Aktion "foo.DoSyncAction (id)" eine Weile dauert.
Wenn beispielsweise eine Ausnahme ausgelöst wird, wird die Ausnahme abgefangen, aber seine Nachricht ist null.

Dasselbe passiert, wenn keine Ausnahme ausgelöst wird. "ActionResult" ist null.
Wenn ich eine Aktion verwende, die weniger Zeit in Anspruch nimmt, sind die zurückgegebenen Nachrichten nicht null oder leer.
Und es passiert nicht im Debug-Modus, die auf meiner Seite zurückgegebene Nachricht ist nicht null.
Ich glaube, ich habe es vergessen oder ich mache etwas falsch, aber ich kann nicht herausfinden, was falsch ist.

[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);
    }
}

Meine AJAX-Anfrage:

$.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);
    }
});

Hier ist ein Beispiel für eine ähnliche Situation: dotnetfiddle.net/cG2L0u Ich verwende das Sagnalrac-Beispiel mit einer Wartezeit von 10 Sekunden, und mein Problem ist aufgetreten. Die Liste der Elemente wird nicht mehr angezeigt und das console.log gibt eine leere Zeichenfolge zurück. Ich verwende ASP MVC 5 mit .NET 4.8

Antworten

Tanguy Aug 23 2020 at 17:01

Ich habe mein Problem gelöst, aber ich habe immer noch einige Missverständnisse.

Meine Methode gibt eine Ausnahme zurück, die sich systematisch auf das Konto bezieht, das die Methode ausführt (deshalb funktioniert sie beim Debuggen, auf einem Webserver jedoch nicht, da die verwendeten Konten unterschiedlich sind).

Das Seltsame ist, dass meine Methode eine Ausnahme auslöst. Ich schaffe es sogar, sie zu fangen und per Post zu senden. Wenn der Controller die Ausnahme abfängt, ist er leer oder null. Ich werde versuchen, dieses Problem genauer zu betrachten.

Nachdem ich das Problem behoben hatte, habe ich versucht, eine Zeitüberschreitung von 2 Minuten hinzuzufügen, und es ist kein Problem aufgetreten (ich denke, im Beispiel hat dotnetfiddle eine andere Konfiguration als meine, deshalb wird keine Ausnahme angezeigt).