JQuery ajax d'erreur de la fonction est exécutée même si la requête est réussie
Je suis en train d'apprendre JQuery et j'ai un petit problème avec ajax. Je suis en train de remplir un tableau javascript avec des valeurs de retour d'une réponse XML à partir d'une page.
Voici ma page principale (ajax.html):
<html>
<head>
<script type="text/javascript" src="jquery/jquery.js"></script>
<script type="text/javascript" src="jquery/fiber.js"></script>
</head>
<body>
<p>Ajax</p>
<script>
var ringType = new Array();
</script>
</body>
</html>
fiber.js est-ce:
//process things for fiber map
jQuery(document).ready(function() {
//do stuff when DOM is ready
//populate and display ringType
$.ajax({
type: "GET",
url: "ajaxHelper.pl",
data: {
getRingTypes: "1",
},
dataType: "xml",
success: function(xml) {
//if the query was successfull,
alert("Got an xml object:"+$(xml));
$(xml).find("ringType").each( function(){
alert("Received reply "+$(this).text());
var type = $(this).html(); //save the value
//append to ringType array
ringType.push(type);
});
},
error:function (xhr, ajaxOptions, thrownError){
alert(xhr.status);
alert(thrownError);
}
});
for(var i=0; i<ringType.length; i++){
document.write("<br>"+ringType[i]);
}
});
ajaxHelper.pl génère ce XML (sans les barres obliques inverses dans l' \?) (en tant que content-type text/xml):
<?xml version="1.0" encoding="ISO-8859-1"?>
<\?xml version="1.0" encoding="ISO-8859-1"\?>
<ringType>IA</ringType>
<ringType>IL</ringType>
<ringType>IN</ringType>
<ringType>IR</ringType>
<ringType>RT</ringType>
Le problème est, à chaque fois que je charge ajax.html la requête ajax est un succès, mais la fonction d'erreur est exécuté! xhr.statut = 200 (signification de la requête était ok) et thrownException est pas défini.
Désolé, le xml n'a pas de coller correctement. Voilà encore une fois (avec des espaces): < ? xml version= "1.0" encoding="ISO-8859-1" ? > < ringType > IA < / ringType > < ringType > IL < / ringType > < ringType > < / ringType > < ringType > IR < / ringType > < ringType > RT < / ringType >
Essayez de mettre des <?xml version="1.0" encoding="UTF-8"?> au dessus de la sortie de document XML, si vous ne l'avez pas déjà
si vous ouvrez le ajaxHelper.pl fichier dans votre navigateur (mywebapp/ajaxHelper.pl), le navigateur de reconnaître la réponse à partir du fichier XML?
Essayez de mettre des <?xml version="1.0" encoding="UTF-8"?> au dessus de la sortie de document XML, si vous ne l'avez pas déjà
si vous ouvrez le ajaxHelper.pl fichier dans votre navigateur (mywebapp/ajaxHelper.pl), le navigateur de reconnaître la réponse à partir du fichier XML?
OriginalL'auteur Adrian | 2009-06-09
Vous devez vous connecter pour publier un commentaire.
Cela se passe dans tous les navigateurs?
1) Vous pouvez utiliser complète au lieu de réussite et d'erreur pour gérer la situation. Utiliser un if pour vérifier la XHR le statut du retour et de la direction en conséquence.
http://docs.jquery.com/Ajax/jQuery.ajax#options
J'ai ajouté la fonction complète et quand je vérifie son état, j'obtiens un "parsererror" - signifie que le xml j'envoie n'est pas valide. Au moins maintenant, je sais où continuez à creuser. Merci!!!!
Apparemment XMLs avoir la définition xsd valides. Mon code ne fonctionnera pas sans eux. Maintenant (que j'ai créé le manque de définition), tout fonctionne comme prévu.
OriginalL'auteur Antony Carthy
via http://groups.google.com/group/jquery-en/browse_thread/thread/23679594ebe128a9
Assurez-vous que vous êtes de retour xml valide 🙂
OriginalL'auteur bloudermilk
AJAX est Asynchrone. Ce qui signifie que le $.ajax fonction démarre la demande de la ajaxHelper.pl. En attendant, il poursuit l'exécution de votre code. La demande n'a aucune chance de retour avant que vous atteigniez la ligne suivante après $.ajax(...)
Donc je suppose que vous avez une exception qui ringType n'est pas défini...? Et que peut-être la raison pour laquelle la fonction d'erreur est déclenchée.
Lorsqu'une erreur est levée, le script s'arrête en cours d'exécution. Je n'ai pas regardé le jQuery internes de la manière dont ils manipulent des exceptions, mais juste essayer de déplacer la boucle for à l'intérieur de la fonction de rappel.
OriginalL'auteur gregers