Как проверить тип ответа для вызова AJAX - PullRequest
69 голосов
/ 18 сентября 2010

Как определить тип ответа на вызов ajax в Jquery?Иногда сервер отправляет ответ JSON, а иногда он отправляет только HTML для отображения.Прямо сейчас я использую

if(response.indexOf('Error'))
  //popup error message
else
 response.username
 response.address

Ответы [ 5 ]

122 голосов
/ 18 сентября 2010

Вы можете попробовать это как:

$.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, но кажется более надежным.

17 голосов
/ 05 июля 2012

Вы можете просто использовать простой метод javascript для проверки типа

т.е.

if(typeof response=="object")
{
 // Response is javascript object
}
else
{
 // Response is HTML
}

Если вы используете этот метод, вам не нужно записывать 2 дополнительных параметра в обратном вызове успеха.

9 голосов
/ 22 сентября 2014

Если ответ анализируется как 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 :

Если указан json, ответ анализируется с использованием jQuery.parseJSON перед передачей в качестве объекта обработчику успеха.Обработанный JSON-объект становится доступным через свойство responseJSON объекта jqXHR.

8 голосов
/ 09 декабря 2011

Ответы выше не сработали для меня, поэтому я пришел к такому решению:

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
    }}
0 голосов
/ 18 сентября 2010

Чтобы принять ответ в формате JSON, вы можете установить тип ответа как JSON. Я обычно проектирую свой серверный код, чтобы они всегда возвращали JSON-ответ. Если по какой-либо причине это не удается, я получаю сообщение об ошибке в своем вызове AJAX из-за неправильного формата JSON, и я могу обработать ответ с сервера как не являющийся JSON.

error: function(response, status, xhr){ 
// do something with the reply.
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...