2010-11-12 3 views
0

J'ai écrit une application Web qui enregistre un fichier via http sur un service Web reposant. Le service Web peut répondre avec une réponse 400 ou 403 si le service trouve des problèmes avec la demande. La réponse contient également xml décrivant la (les) raison (s) pour répondre avec un code d'erreur http. Mon application Web publie le fichier dans un iFrame caché et utilise le gestionnaire d'événements onload de l'iFrame pour exécuter une fonction qui analyse la réponse du serveur présentée dans l'iFrame et indique à l'utilisateur comment le chargement du fichier s'est déroulé.Comment publier un fichier et analyser une réponse xml dans Internet Explorer 7

Ma solution fonctionne très bien avec Firefox et Chrome, mais pas dans Internet Explorer 7.

Mon problème est que si le serveur répond avec un code d'erreur par exemple 400 ou 403 Internet Explorer 7 charge sa propre page d'erreur statique. Cela signifie que mon script ne peut pas analyser le message d'erreur envoyé dans la réponse car la page d'erreur statique ne provient pas du même domaine que le script et enfreint la même règle d'origine (et c'est une page d'erreur statique). le message ne sera pas là de toute façon).

Je ne vois que deux solutions de contournement à ce problème et je préférerais les éviter à la fois si possible:

A) est le retour de service Web 200, lorsque l'agent utilisateur indique Internet Explorer, même si une erreur a s'est produite mais inclut une réponse XML qui indique une erreur. B) Demandez à l'application Web de publier un message à un «intermédiaire» qui transmet la demande au service Web, lit la réponse, puis la traduit en 200 ou tout autre élément qui fonctionne (il s'agit donc essentiellement de l'option A au moins cela garde le service Web reposant "propre").

Existe-t-il un autre moyen de résoudre mon problème?

+0

Peut-être utiliser Ajax plutôt qu'un Iframe pour publier vos données? –

+0

Si le serveur répond avec un code d'erreur, l'événement 'error' ne se déclencherait-il pas sur l'iframe (plutôt que sur l'événement' load')? – JPot

+0

Brian Driscoll: Je poste un ou plusieurs fichiers (à partir du client harddrive), est-il possible de télécharger des fichiers en utilisant Ajax? – John

Répondre

0

J'ai réussi à résoudre ce problème car un collègue s'est souvenu que si le corps de la réponse n'est pas d'une certaine longueur lors de l'envoi d'une réponse 4xx, Internet Explorer chargera sa page d'erreur statique.

La solution consiste à renvoyer un corps de réponse plus long avec votre réponse 4xx, par ex. un commentaire xml contenant un espace blanc.

0

En supposant que vous avez le contrôle du serveur, vous pouvez trouver la meilleure solution est d'utiliser l'iframe uniquement pour l'envoi du fichier (c'est-à-dire d'un côté .... du client au serveur). Ensuite, utilisez une solution d'interrogation ajax pour déterminer si le post a réussi. Il peut être un peu brouillon, mais devrait être beaucoup plus fiable, et vous pouvez également obtenir des informations avant la fin du message.

Questions connexes