web-dev-qa-db-fra.com

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

Comment puis-je déterminer le type de réponse de l'appel ajax dans Jquery? Parfois, le serveur envoie une réponse json et parfois il n'envoie que du code HTML à des fins d'affichage. En ce moment j'utilise

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

Vous pouvez l'essayer comme:

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

Fondamentalement, il utilise également indexOf mais il semble plus fiable.

123
Ankit Jaiswal

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 rappel de réussite.

17
Imdad

Si la réponse est analysée en JSON, l'objet jqXHR aura une propriété 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
    }
})

De la documentation jQuery.ajax :

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

9
tyrion

Les réponses ci-dessus n'ont pas fonctionné pour moi, j'ai donc 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
    }}
8
SolidALb

Pour accepter une réponse JSON, vous pouvez définir le type de réponse sur JSON. Je conçois généralement mon code côté serveur afin qu'ils retournent toujours une réponse JSON. Dans le cas où il ne le ferait pas pour une raison quelconque, j'obtiendrais une erreur dans mon AJAX appel pour avoir un format JSON incorrect et je peux traiter la réponse du serveur comme n'étant pas non JSON.

error: function(response, status, xhr){ 
// do something with the reply.
}
0
Shamim Hafiz