la llamada ajax da como resultado un error en lugar de un éxito
-
28-10-2019 - |
Pregunta
En mi proyecto ASP.net mvc3, utilizo una llamada ajax para enviar datos json a un método de acción de creación en la empresa controladora.Pero cuando depuro la llamada ajax, siempre termina en un resultado de error en lugar de un resultado exitoso.
llamada ajax:
$.ajax({
url: '/Company/Create',
type: 'POST',
data: JSON.stringify(CreateCompany),
dataType: 'Json',
contentType: 'application/json; charset=utf-8',
success: function () {
alert('ajax call successful');
},
error: function () {
alert('ajax call not successful');
}
});
Mi método de acción en el controlador de la empresa:
[HttpPost]
public ActionResult Create (Company company)
{
try
{
//Create company
CompanyRepo.Create(company);
return null;
}
catch
{
return View("Error");
}
}
Ya depuré el método de acción, pero él lo completa como debería.Entonces, los datos enviados con la llamada ajax serán manejados y escritos en la base de datos.(El método de acción no utiliza la parte catch).
¿Por qué mi llamada ajax todavía muestra el mensaje "la llamada ajax no fue exitosa"?
Solución
Solía tener el mismo problema al recuperar el resultado JSON.Lo que hice es establecer el tipo de datos en "Text JSON" :)) Si esto no ayuda a intentar obtener información adicional adquiriendo detalles de su error, es decir:
$.ajax({
url: '/Company/Create',
type: 'POST',
data: JSON.stringify(CreateCompany),
dataType: 'text json',
contentType: 'application/json; charset=utf-8',
success: function () {
alert('ajax call successful');
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
alert("XMLHttpRequest=" + XMLHttpRequest.responseText + "\ntextStatus=" + textStatus + "\nerrorThrown=" + errorThrown);
}
});
POR CIERTO:Encontré esta solución en algún lugar de StackOverflow
Otros consejos
¿Por qué estás regresando? null
¿En caso de éxito en la acción de su controlador? Devolver algo al éxito como, por ejemplo, un objeto JSON (especialmente como indicó en su solicitud AJAX que espera la respuesta JSON del servidor, utilizando el dataType: 'json'
configuración - que debe ser en minúsculas j
de paso):
return Json(new { success = true });
¿No sería esto más fácil?
$.post("/Company/Create", function (d) {
if (d.Success) {
alert("Yay!");
} else {
alert("Aww...");
}
}, "json");
Y en tu controlador.
[HttpPost]
public JsonResult Create(
[Bind(...)] Company Company) { <- Should be binding
if (this.ModelState.IsValid) { <- Should be checking the model state if its valid
CompanyRepo.Create(Company);
return this.Json(new {
Success = true
});
};
return this.Json(new {
Success = false
});
}