Rappel d’erreur jQuery ajax ne se déclenche pas

Je demande une URL avec ajax qui aboutit à un code d’en-tête HTTP 500. Je pense que cela déclenchera la fonction d’erreur:

$.ajax({ url: "http://xxx", dataType: "jsonp", crossDomain: true, success: function( data ) { alert('success'); }, error: function () { alert('error'); } }); 

Cela fonctionne en safari, mais échoue en chrome et firefox.

Qu’est-ce que je fais mal?

Ceci est le dernier jquery 1.4.X, pour des raisons que je ne peux pas mettre à jour vers des versions ultérieures ..

La réponse envoie un code HTTP 500, un type de contenu application / json et un contenu:

jsonp1310063232212 ({“erreur”: {“raison”: “Utilisateur non trouvé”}})

Il semble que crossDomain: n’a été ajouté que jQuery 1.5.

http://api.jquery.com/jQuery.ajax/

crossDomain (ajouté 1.5)

Valeur par défaut: false pour les demandes du même domaine, true pour les demandes inter-domaines.

Si vous souhaitez forcer une demande crossDomain (telle que JSONP) sur le même domaine, définissez la valeur de crossDomain sur true. Cela permet, par exemple, la redirection côté serveur vers un autre domaine.

Comme Martin Larente l’a suggéré dans son commentaire, cela pourrait être dû à la manière dont différents navigateurs ou jQuery détecte / signale les erreurs JSONP.

Comme indiqué dans la documentation JQuery [1], le gestionnaire d’erreurs n’est pas appelé pour les requêtes de script inter-domaines et JSONP. Cela a fonctionné (pas toujours) sur les anciennes versions de JQuery.

Je résous en utilisant un plugin compact et efficace incluant un bon gestionnaire d’erreurs: http://code.google.com/p/jquery-jsonp/

Téléchargez-le et ajoutez-le à la tête:

  

Ensuite, vous pouvez utiliser une fonction $ .jsonp () similaire à $ .ajax ():

 $.jsonp({ url: "http://xxx?callback=?", data: { var: 'test' }, cache: false, success: function(data, textStatus) { // ... }, error: function(xOptions, textStatus) { console.log('Error'); // ... } }); 

[1] http://api.jquery.com/jQuery.ajax/

Il semble y avoir des problèmes en suspens à ce sujet. Abandon de la requête ajax JSONP avec jQuery