71 votes

jquery comment vérifier le type de réponse pour un appel ajax

Comment puis-je déterminer le type de réponse d'un appel ajax dans Jquery ? Parfois, le serveur envoie une réponse json et parfois il envoie seulement le html pour l'affichage. Pour l'instant, j'utilise

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

127voto

Ankit Jaiswal Points 6128

Vous pouvez l'essayer comme ça :

$.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
    } 
  }
});

En fait, il utilise également indexOf, mais cela semble plus fiable.

18voto

Imdad Points 2904

Vous pouvez simplement utiliser la méthode simple de javascript pour vérifier le type

c'est-à-dire

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

Si vous utilisez cette méthode, vous n'avez pas besoin d'écrire 2 paramètres supplémentaires dans le callback du succès.

10voto

tyrion Points 366

Si la réponse est analysée en tant que JSON, l'élément jqXHR aura un responseJSON propriété.

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

De la Documentation sur jQuery.ajax :

Si json est spécifié, la réponse est analysée à l'aide de jQuery.parseJSON avant d'être transmise, sous forme d'objet, au gestionnaire de réussite. L'objet JSON analysé est disponible via la propriété responseJSON de l'objet jqXHR.

8voto

SolidALb Points 98

Les réponses ci-dessus n'ont pas fonctionné pour moi, alors j'ai trouvé cette solution :

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

0voto

Dick Points 716

Avez-vous essayé de regarder le type MIME de l'en-tête de la réponse ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X