Envoyé par : thefab
Date : 11/07/2007 09:49
J'utilise E4X pour parser les réponses d'un service Web qui me retourne du XML si tout est OK sinon du texte brut avec le message d'erreur. Le problème c'est que je n'arrive pas à détecter si il s'agit de texte ou de XML dans la réponse.
Même si text n'est pas du XML valide, response est quand même du type XML:
var response = new XML(text); if (typeof response != "xml") { throw text; }
Si je teste des sous-éléments de la réponse qui n'existent pas j'obtiens quand même un objet de type XML:
dump(typeof response.jobStatus.status);
Est-ce que quelqu'un a une solution à me proposer ?
Envoyé par : papy
Date : 11/07/2007 10:20
Hello,
j'utilise une méthode similaire et il me semble que la création d'un nouvel objet XML génère une exception si le text proposé n'est pas parsable correctement, mais c'est à vérifier.
try { var response = new XML(text); } catch(e) { var response = null; } if(response) { ... } else { ... }
Envoyé par : thefab
Date : 11/07/2007 10:57
il me semble que la création d'un nouvel objet XML génère une exception si le text proposé n'est pas parsable correctement
Il me semblais aussi mais non pas d'exception, c'est seulement lorsque l'on tente d'y accéder mais seulement sous forme de tableau !
response.jobStatus.status // OK même si ce n'est pas du XML response.jobStatus[0] // Erreur si pas du XML
Je teste donc de cette manière:
var response = new XML(text); if (!response.jobStatus[0]) { throw text; }
C'est donc résolu, Merci
Envoyé par : papy
Date : 11/07/2007 11:07
Etrange tout ca, j'ai fait le test après avoir posté mon message, et ca me génère bien une exception.
Code qui génère une exception "XML tag name mismatch (expected coucou)"
new XML("<coucou>");
En revanche le code suivant ne génère pas d'exception, donc il semble que E4X a quelques problèmes de gestion d'erreurs ;)
new XML("coucou");
Conclusion :
Merci thefab, je vais pouvoir corriger mes fonctions en ajoutant ta méthode...
Envoyé par : thefab
Date : 11/07/2007 11:19
Dans le cas d'un message d'erreur de la part du serveur c'est bien le premier cas qui s'applique, donc sans exception:
new XML("Message d'erreur");
Merci à toi pour ces précisions
Envoyé par : Eric
Date : 11/07/2007 11:56
En effet, le test suivant
var y = "non xml string"; var x = new XML(y); alert(x);
ne retourne pas d'erreur
alors que celui-ci
var y = "<test>" + "<item value=5/>" + "<item value='6'/>" + "<item value='7'/>" + "</test>"; var x = new XML(x); alert(x);
retourne une syntax error : illegal xlm character
à propos du test sur des éléments qui nexistent pas : ECMA-357 does not throw ReferenceError for undefined XML names
de mon côté, j'échange du rdf entre le serveur et le client et les erreurs sont encapsulées dans un message rdf : le retour serveur est donc toujours un rdf dans lequel je teste en permier lieu si j'ai un tag d'erreur. Cela peut être une solution si tu as la main sur ton service web.
Envoyé par : thefab
Date : 11/07/2007 12:41
Cela peut être une solution si tu as la main sur ton service web.
Et non mais effectivement c'est plus logique de retourner toujours du XML, RDF,... qu'il s'agisse d'une erreur ou non.
Il n'est plus possible de poster des messages dans ce forum.
Copyright © 2003-2013 association xulfr, 2013-2016 Laurent Jouanneau - Informations légales.
Mozilla® est une marque déposée de la fondation Mozilla.
Mozilla.org™, Firefox™, Thunderbird™, Mozilla Suite™ et XUL™
sont des marques de la fondation Mozilla.