Ajax Call приводит к ошибке вместо успеха
-
28-10-2019 - |
Вопрос
В моем проекте ASP.NET MVC3 я использую вызов AJAX для отправки данных JSON в Create ActionMethod в компании -контроллере. Но когда я отлаживаю вызов Ajax, он всегда оказывается в результате ошибки, а не в результате успеха.
Ajax Call:
$.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');
}
});
Мой метод действия в контроллере компании:
[HttpPost]
public ActionResult Create (Company company)
{
try
{
//Create company
CompanyRepo.Create(company);
return null;
}
catch
{
return View("Error");
}
}
Я уже отлаживал ActionMethod, но он завершает его, как и должен. Таким образом, отправка данных с вызовом AJAX будет обрабатывается и записана в БД. (Метод действия не использует часть подъема).
Почему мой вызов Ajax по -прежнему дает сообщение «Ajax Call не успешным»?
Решение
Раньше у меня была такая же проблема с возвращением результата JSON. Что я сделал, так это установить данные DataType на «текст json» :)), если это не поможет попытаться получить дополнительную информацию, получая подробную информацию о вашей ошибке, то есть:
$.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);
}
});
Кстати: я нашел это решение где -то на Stackoverflow
Другие советы
Почему ты возвращаешься null
В случае успеха в действии контроллера? Вернуть что -то к успеху, например, объект JSON (особенно, как вы указали в своем запросе AJAX, вы ожидаете ответа JSON от сервера - используя dataType: 'json'
Установка - что должно быть строчным j
кстати):
return Json(new { success = true });
Разве это не было бы просто проще:
$.post("/Company/Create", function (d) {
if (d.Success) {
alert("Yay!");
} else {
alert("Aww...");
}
}, "json");
И в вашем контроллере.
[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
});
}