Вопрос

В моем проекте 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
    });
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top