2009-07-22 11 views
2

J'essaie d'appeler une actionMethod ASP.NET MVC via la méthode JQuery ajax. Mon code est le suivant:JQuery ajax parsererror dans l'application ASP.NET MVC

$('.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 reviens 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, quand le type de retour est une chaîne je reçois une boîte d'alerte disant "Erreur: erreur non définie" et la deuxième boîte d'alerte est vide.

Si je fais le vide de type de 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 
+0

Hmm ma réponse était la même et le premier! – redsquare

+0

Mon mauvais, trié maintenant! – Fermin

Répondre

4

Je ne conseillerais pas de retourner une chaîne vide. Puisque vous avez défini dataType sur json jquery, la réponse sera évaluée.

Vous devriez toujours retourner un message logique.

return Json(new { success = "true" });

N.B. dans le succès que vous utilisez $(tr).remove(); Vous n'avez pas besoin de votre variable tr étant déjà un objet jQuery, donc tr.remove fonctionnera très bien.

5

Votre appel jQuery attend Json en retour de la demande. Alors:

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