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"}