jQuery - Ajax-запрос возвращает 200 OK, но событие ошибки происходит

jQuery - запрос Ajax возвращает 200 OK, но возникает событие ошибки?

Просмотрите отправку формы jQuery Ajax.

    $(document).ready(function () {

        $("#hostingForm").submit(function (e) {

            e.preventDefault(e);

            var data = {}
            data["id"] = $("#id").val();
            data["domain"] = $("#domain").val();
            data["name"] = $("#name").val();
            //...

            $.ajax({
                type: "POST",
                contentType: "application/json",
                url: "{{home}}/hosting/update",
                data: JSON.stringify(data),
                dataType: 'json',
                timeout: 600000,
                success: function (data) {

                    console.log("SUCCESS: ", data);
                },
                error: function (e) {

                    console.log("ERROR: ", e);
                }
            });

        });
    });

Просмотрите серверную часть (Spring MVC), чтобы получить запрос Ajax.

@RestController
@RequestMapping("/hosting")
public class AdminHostingController {

    @Autowired
    HostingBo hostingBo;

    @RequestMapping(value = "/update", method = RequestMethod.POST)
    public String updateHosting(@RequestBody HostingForm hostingForm) {

        if(hostingForm!=null){
            hostingBo.update(hostingForm, UpdatedBy.WEB);
        }

        return "success";

    }

Приведенный выше код Spring MVC работает нормально, обновляет базу данных и возвращает строку «Success».

1. проблема

Как клиентская сторона (отправка формы jQuery Ajax), так и сторона сервера (Spring MVC) работают нормально, но возникает событие ошибки Ajax?

См. Следующий вывод в консоли браузера:

ERROR:  Object {readyState: 4, responseText: "success", status: 200, statusText: "OK"}

200 OK, но возникает ошибка?

2. Решение

В jQuery.ajax(), если указан параметрdataType: 'json', сервер должен возвращать действительную строку в формате JSON, иначе возникает ошибка.

Note
Просмотрите следующее заявление официальногоjQuery Ajax documentation – dataType settings:

«… Данные JSON анализируются строго; любой неверно сформированный JSON отклоняется и выдается ошибка синтаксического анализа… »

To fix this, обновите серверную часть, чтобы она возвращала строку в формате JSON:

@RestController
@RequestMapping("/hosting")
public class AdminHostingController {

    @Autowired
    HostingBo hostingBo;

    @RequestMapping(value = "/update", method = RequestMethod.POST)
    public String updateHosting(@RequestBody HostingForm hostingForm) {

        if(hostingForm!=null){
            hostingBo.update(hostingForm, UpdatedBy.WEB);
        }

        //NEED JSON format
        return "{\"msg\":\"success\"}";

        //return "success";

    }

Повторите попытку, снова просмотрите консоль браузера, запускается событие «Success».

SUCCESS:  Object {msg: "success"}