2017-08-15 1 views
0

je la demande Ajax suivante:Ajax POST contrôleur MVC toujours erroring

$.ajax({ 
    url: '/Projects/Index', 
    type: 'POST', 
    data: data, 
    dataType: 'json', 
    contentType: 'application/json; charset=utf-8', 
    error: xhr => { swal('From Error!', 'We\'ve saved your hours, thanks for your input!', 'success'); console.log(xhr) }, 
    success: result => swal('From Success!', 'We\'ve saved your hours, thanks for your input!', 'success') 
}); 

qui, même lorsque le code d'état est de 200, toujours des erreurs. Mon contrôleur reçoit le data et fait les choses avec elle, puis renvoie View().

Voici mon action du contrôleur en pleine:

[HttpPost, ActionName("Index")] 
public ActionResult SetHours(HourPostRequest[] data) 
{ 
    foreach(var item in data) 
    { 
     var correctModel = item.ToEngineerHours(db); 
     db.EngineerHours.Add(correctModel); 
     db.SaveChanges(); 
    } 

    var eng = db.Engineers.FirstOrDefault(e => e.DomainUsername == User.Identity.Name).ID; 
    var test = db.EngineerHours.Where(e => e.EngineerID == eng).ToList(); 

    return View(test); 
} 

Les données sont toujours intactes, a reçu fin et View retourne toujours. J'ai ajouté dans une collection test aléatoire pour revenir qui est le modèle de mon point de vue:

@model IList<Timesheet.Models.EngineerHours>

Je suis allé dans la vue du réseau Dev-Tools Chrome et la charge utile est correcte, la réponse est 200 et le contrôleur a reçu les données et a renvoyé View.

Cela signifie que mes alertes SweetAlert2 sont toujours erronées, quel que soit le statut de réussite.

Quelqu'un peut-il repérer pourquoi cela pourrait se produire?

Répondre

1

Vous renvoyez View(), qui est une chaîne HTML à la fin de la journée. Cependant, dans votre demande, vous spécifiez:

dataType: 'json' 

qui indique jQuery pour attendre la réponse en tant que chaîne au format JSON. jQuery voit HTML et n'est pas capable de le reconnaître comme un json valide, d'où l'erreur.

+0

Très apprécié! –