Как обрабатывать ajax 201
При выполнении вызова ajax, см. Пример ниже, при success
выполнении статус 201 возвращается. Как вы справляетесь с этим лучше, то есть 200, 201 в рамках функции успеха?
$.ajax({
type: "POST",
dataType: "json",
url: "http://api.domain.com/sms",
data: {
// Send value in mobile input field.
mobile: $("#mobile").val(),
},
// On successful AJAX call do the following.
success: function(data) {
$('#messageText').text('SMS successfully sent');
},
error: function(jqXhr) {
data = JSON.parse(jqXhr.responseText);
}
});
Ответы
Ответ 1
Используйте объект statusCode
:
var handle200 = function(data, textStatus, jqXHR) {
alert('200'); // success codes have the success signature
};
var handle201 = function(data, textStatus, jqXHR) {
alert('201'); // success codes have the success signature
// test it if you are in doubt:
console.log(data);
console.log(textStatus);
console.log(jqXHR);
};
var handle404 = function(jqXHR, textStatus, errorThrown) {
alert('404'); // failing codes have the error signature
});
var request = $.ajax({
type: 'POST',
url: '/myresource/posttarget',
data: { name: 'john' },
statusCode: {
200: handle200,
201: handle201,
404: handle404
}
});
Ответ 2
Это старый вопрос, но я все равно хочу прокомментировать.
У меня была такая же проблема, и одна вещь, которая разрешила это для меня, оставила "dataType" незавершенной. Когда вы это сделаете, jQuery попытается угадать тип данных, который возвращает сервер, и не будет вызывать ошибку, когда ваш сервер вернет 201 без содержимого.
Надеюсь, что это поможет.
Ответ 3
Данные вставлены успешно, но jquery все еще возвращает ошибку
Ответ здесь - это работа, которую вы можете использовать сейчас. Однако, если вы используете кросс-домен, у AJAX есть некоторые проблемы с этим. Проверьте этот поток SOF на нем:
Проблемы с чтением HTTP-кода состояния/ошибки из jQuery AJAX
Ответ 4
У нас была аналогичная проблема; Глядя на источник jquery 1.9, код состояния 201 ожидает контента. Если нет содержимого (или неправильного типа содержимого), возвращаемого с 201, тогда вызывается обратный вызов отказа.
Ответ 5
Вместо
ResponseEntity<?> responseEntity = new ResponseEntity<>(HttpStatus.CREATED);
я использовал
ResponseEntity<?> responseEntity = new ResponseEntity<>(detailVO, HttpStatus.CREATED);
Где detailVO - мой объект для рутруна в случае успеха. Затем в браузере я получил ответ в функции успеха.