Рубрики
Без рубрики

Запрос jQuery – Ajax возвращает 200 ОК, но срабатывает событие ошибки?

– Запрос jQuery – Ajax возвращает 200 ОК, но срабатывает событие ошибки?

Просмотрите отправленную форму 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 работает нормально, обновил базу данных и вернул строку “успех”.

1. Проблема

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

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

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

200 ХОРОШО, но происходит событие ошибки?

2. Решение

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

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

Чтобы исправить это , обновите серверную часть, чтобы возвращать строку в формате 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:  Object {msg: "success"}

Рекомендации

  1. Документация по jQuery.ajax()
  2. Википедия: JSON
  3. Весенний MVC и JSON

Оригинал: “https://mkyong.com/jquery/jquery-ajax-request-return-200-ok-but-error-event-is-fired/”