Pourquoi cet appel jQuery Ajax échoue-t-il SEULEMENT dans IE9 (Même fonctionne bien dans IE8 et IE7)
J'ai un site où je fais un appel ajax comme ceci:
//perform an ajax request to generate a new subscriber account
jQuery.ajax({
type: 'POST',
url: '/index.php?option=com_content&view=article&id=45&tmpl=component',
data: postVars,
success: handleResponse,
error: function(jqXHR, textStatus, errorThrown) {
alert ('response: ' + jqXHR.responseText);
alert ('code: ' + jqXHR.getResponseHeader('X-Subscriber-Status'));
}
});
La page demandée n'a pas faire autre chose que le retour à un seul chiffre de code d'état, et il fonctionne très bien avec tous les navigateurs, sauf pour IE9. Le script est hébergé sur le même domaine que la page il demande donc il ne devrait pas être un problème avec la croix-domaine de script.
J'ai enfin retrouvé ce qui se passe mais je ne sais pas comment le résoudre. Il s'avère que la requête Ajax est terminée avec succès sans problèmes. J'ai vérifié cela en utilisant le Violoneux de regarder le trafic réseau. Le serveur répond à la demande avec un code d'état HTTP 200, et le corps ne contient pas rien, mais un seul chiffre de code de réponse. À ce stade, jQuery exécute le gestionnaire d'erreur, PAS le gestionnaire de succès que prévu (IE9). Pourquoi faut-il faire et comment puis-je l'empêcher?? Cela se produit UNIQUEMENT dans IE9. Même IE8 et IE7 fonctionne très bien avec exactement le même code! Comme vous pouvez le voir j'ai finalement eu recours à la détection de IE9 et à l'aide d'un objet XmlHttpRequest pour le faire (ce qui fonctionne très bien par ailleurs).
Cela semble être un bug jQuery pour moi, mais je ne trouve aucune mention de cela dans mes recherches. Suis-je vraiment le seul à éprouver ce comportement étrange?
source d'informationauteur rushinge
Vous devez vous connecter pour publier un commentaire.
Eh bien j'ai enfin retrouvé le problème. Il s'avère que, pour quelque raison jQuery/IE ne gère pas correctement la fonction urlencode guillemets doubles. L'URL de la requête était:
/recherche.json?rappel=jQuery16105234487927080267_1313510362362&q=stocks OU à la bourse "" - plan d'action-empireavenue.com -apprendre&_=1313510362469
Dans tous les autres navigateur par le temps jQuery effectué la requête ajax, il ressemblait:
/search.json?callback=jQuery16105234487927080267_1313510362362&q=stocks%20OR%20%22stock%20market%22%20-blueprint%20-empireavenue.com%20-learn&_=1313510362469
mais pour quelque raison que ce soit, dans toutes les versions d'IE c'est venu comme ça:
/search.json?callback=jQuery16105234487927080267_1313510362362&q=stocks%20OR%20"stock%20market"%20-blueprint%20-empireavenue.com%20-learn&_=1313510362469
qui a causé le serveur renvoie pas de données.
Êtes-vous sûr que l'URL que vous êtes d'appel (
/index.php?option=com_content&view=article&id=45&tmpl=component
) travaille dans IE9? Si vous chargez que la page PHP dans IE9, est-il renvoyer le résultat attendu? Il devrait faire, mais il vaut la peine de vérifier que l'erreur est dans le jQuery appel, plutôt que le PHP.Aussi, un appel POST est, en général, une page comme "index.php" avec la chaîne de requête (
option=com_content
view=article
etc.) envoyé en tant que variablepostVars
.Essayez d'utiliser les éléments suivants:
Bande vers le bas la fonction de ses éléments de base, et vous devriez être en mesure de voir où est l'erreur vient de.