Jquery, как проверить тип ответа для вызова ajax
Как определить тип ответа ajax-вызова в JQuery? Время от времени сервер отправляет ответ json, и порой он отправляет только html для отображения. Сейчас я использую
if(response.indexOf('Error'))
//popup error message
else
response.username
response.address
Ответы
Ответ 1
Вы можете попробовать:
$.ajax({
type: "POST",
url: "your url goes here",
data: "data to be sent",
success: function(response, status, xhr){
var ct = xhr.getResponseHeader("content-type") || "";
if (ct.indexOf('html') > -1) {
//do something
}
if (ct.indexOf('json') > -1) {
// handle json here
}
}
});
В основном он также использует indexOf, но кажется более надежным.
Ответ 2
Вы можете просто использовать простой метод javascript для проверки типа
то есть.
if(typeof response=="object")
{
// Response is javascript object
}
else
{
// Response is HTML
}
Если вы используете этот метод, вам не нужно писать 2 дополнительных параметра в обратном вызове.
Ответ 3
Ответы выше не работали для меня, поэтому я придумал это решение:
success: function(data, textStatus , xhr) {
if(xhr.responseXML.contentType == "text/html") {
//do something with html
}
else if(xhr.responseXML.contentType == "application/json") {
//do something with json
}}
Ответ 4
Если ответ обрабатывается как JSON, объект jqXHR
будет иметь свойство responseJSON
.
$.ajax(
// ...
).done(function(data, textStatus, jqXHR) {
if (jqXHR.responseJSON) {
// handle JSON
} else {
// handle html
}
}).fail(function(jqXHR, textStatus, errorThrown) {
if (jqXHR.responseJSON) {
// handle JSON
else {
// handle html
}
})
Из jQuery.ajax documentation:
Если json указан, ответ анализируется с использованием jQuery.parseJSON перед передачей в качестве объекта обработчику успеха. Анализируемый объект JSON доступен через свойство responseJSON объекта jqXHR.
Ответ 5
Чтобы принять ответ JSON, вы можете установить тип ответа как JSON. Я обычно разрабатываю свой код на стороне сервера, чтобы они всегда возвращали ответ JSON. В случае, если по какой-либо причине это не поможет, я бы получил ошибку в моем вызове AJAX за неправильный формат JSON, и я могу обработать ответ с сервера как не являющийся JSON.
error: function(response, status, xhr){
// do something with the reply.
}