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