Résultat json vide C # Post AJAX
Je fais une requête POST ajax pour effectuer une action et retourner un résultat sans recharger la page.
Pour cela, j'utilise un résultat JSON, le problème est que lorsque mon action "foo.DoSyncAction (id)" prend un certain temps à s'exécuter, les messages renvoyés sont nuls.
Par exemple, lorsqu'une exception est déclenchée, l'exception est interceptée, mais son message est nul.
La même chose se produit lorsqu'aucune exception n'est levée, "actionResult" est nul.
Si j'utilise une action qui prend moins de temps, les messages renvoyés ne sont ni nuls ni vides.
Et cela ne se produit pas en mode débogage, le message renvoyé sur ma page n'est pas nul.
Je pense que j'ai oublié ou que je fais quelque chose de mal, mais je ne peux pas comprendre ce qui ne va pas.
[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);
}
}
Ma requête 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);
}
});
Voici un exemple de situation similaire: dotnetfiddle.net/cG2L0u J'utilise l'exemple Sagnalrac avec une attente de 10 secondes, et mon problème est survenu. La liste des éléments n'est plus affichée et le console.log renvoie une chaîne vide. J'utilise ASP MVC 5 avec .NET 4.8
Réponses
J'ai résolu mon problème, mais j'ai encore des malentendus.
Ma méthode renvoie une exception systématiquement liée au compte exécutant la méthode (c'est pourquoi en débogage cela fonctionne, alors que sur un serveur web ce n'est pas le cas, car les comptes utilisés sont différents).
Le plus étrange, c'est que ma méthode lève une exception, j'arrive même à l'attraper et à l'envoyer par mail. Mais lorsque le contrôleur intercepte l'exception, elle est vide ou nulle. Je vais essayer de regarder de plus près ce problème.
Une fois que j'ai résolu le problème, j'ai essayé d'ajouter un délai d'attente de 2 minutes, et aucun problème ne s'est produit (je pense que dans l'exemple, dotnetfiddle a une configuration différente de la mienne, c'est pourquoi aucune exception n'apparaît).