JQuery ajax parsererror dans l'application ASP.NET MVC
-
18-09-2019 - |
Question
Je suis en train d'appeler un ASP.NET MVC actionMethod via la méthode ajax JQuery. Mon code est le suivant:
$('.Delete').live('click', function() {
var tr = $(this).parent().parent();
$.ajax({
type: 'DELETE',
url: '/Routing/Delete/' + tr.attr('id'),
contentType: 'application/json; charset=utf-8',
data: '{}',
dataType: 'json',
error: function(XMLHttpRequest, textStatus, errorThrown) {
alert("Error: " + textStatus + " " + errorThrown);
alert(XMLHttpRequest.getAllResponseHeaders());
},
success: function(result) {
// Remove TR element containing waypoint details
alert("Success");
$(tr).remove();
}
});
});
et ma méthode d'action est:
[AcceptVerbs(HttpVerbs.Delete)]
public string Delete(int id)
{
// Deletion code
return " ";
}
Je retourne une chaîne vide comme je l'ai lu quelque part que si la longueur du contenu est 0 alors il peut causer des problèmes, lorsque le type de retour est une chaîne que je reçois un message d'alerte disant « Erreur: erreur non définie » et la seconde zone d'alerte est vide.
Si je fais le vide de type retour, je reçois une alerte disant « Erreur: parsererror non défini » et la seconde alerte est la suivante:
Server: ASP.NET Development Server/9.0.0.0
Date: Wed, 22 Jul 2009 08:27:20 GMT
X-AspNet-Version: 2.0.50727
X-AspNetMvc-Version: 1.0
Cache-Control: private
Content-Length: 0
Connection: Close
La solution
Je ne conseillerais pas de retourner une chaîne vide. Puisque vous avez défini le dataType à JSON jquery sera eval la réponse.
Vous devez toujours retourner un message logique.
return Json(new { success = "true" });
N.B. à l'intérieur du succès que vous utilisez $(tr).remove()
;
Il n'y a pas besoin que votre variable tr est déjà un objet jQuery si
tr.remove
fonctionnera très bien.
Autres conseils
Votre appel jQuery attend JSON en retour de la demande. Donc:
[AcceptVerbs(HttpVerbs.Delete)]
public JsonResult Delete(int id) {
// Deletion code
return Json("");
}
Et aussi je suis d'accord avec redsquare , il est préférable de renvoyer un message logique comme ceci:
[AcceptVerbs(HttpVerbs.Delete)]
public JsonResult Delete(int id) {
// Deletion code
return Json(new { Success = true });
}
//then in your jQuery function you can check the result this way :
success: function(result) {
if (result.Success) {
alert("it was deleted!");
}
else {
alert("something went wrong");
}
}