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