Quand faut du XMLHttpRequest onerror gestionnaire de feu
J'ai un petit problème de compréhension XMLHttpRequest
's des gestionnaires. La spécification dit ceci à propos de l' onerror
gestionnaire:
error
[Expédié ... ] Lorsque la demande a échoué.
load
[Expédié ... ] Lorsque la demande a complété avec succès.
Le problème est, qu'est-ce que cela signifie que "la demande a échoué". Qui pourrait être
- la demande ne pouvait pas être délivré à tous (par exemple. Connexion refusée et de telles erreurs), ou
- le ci-dessus ainsi que le serveur a renvoyé un code d'erreur (par exemple. 404)
Aussi, je voudrais savoir si cela signifie onerror
et onload
ne doit jamais feu simultanément.
Cette référence indique le onerror
gestionnaire doit être exécutée selon les status
code et onload
selon readyState
. Qui pourrait indiquer qu'elles ne sont pas mutuellement exclusives, cependant, je ne pense pas que c'est une information qui fait autorité.
Je demande parce que, à l'aide de la dernière Opéra instantané, j'ai trouvé onload
est tiré, même sur le code d'état 404. Je sais que les tests status
est un pari sûr, mais je voudrais savoir si c'est quelque chose que j'ai à faire par la spécification ou tout simplement un moyen de contournement d'un bogue dans l'Opéra.
- Je prends
has completed successfully
à dire que vous recevez un code d'état, qu'il s'agisse de 200 OK ou un code d'erreur comme 404. Google Chrome est également incendies onload même si le code d'état est un code d'état d'erreur. - onerror et onload jamais feu simultanément. C'est soit l'un ou l'autre. Cependant onloadend incendies dans les deux cas, et est le dernier événement dans la ligne.
Vous devez vous connecter pour publier un commentaire.
Comme mentionné dans les commentaires,
onerror
se déclenche lorsqu'il y a une panne sur la au niveau du réseau. Si l'erreur n'existe que sur le niveau de l'application, par exemple, un code d'erreur HTTP est envoyée, puisonload
encore des feux. Vous avez besoin de tester le code d'état renvoyé explicitement dans votreonreadystatechange
gestionnaire.Noter que le refus de la croix-demande de domaine déclenche également l'
onerror
gestionnaire.status
membre de la demande XHR est en fait0
, où d'autres serveurs de l'envoyer sur une page 404. Apparemment le serveur soudainement fait semblant qu'elle n'existe pas du tout quand il voit une requête pour une page qui n'existe pas. Bizarre, mais c'est la décision de Google.https://encrypted.google.com/foobar
redirige vershttp://www.google.com/foobar
, et que le navigateur est en refusant de participer à un cross-domaine de redirection lors d'une requête Ajax.http://www.google.com/foobar
, ne voit il n'y a pas deAccess-Control-Allow-Origin
en-tête de la réponse et refuse de donner quoi que ce soit pour le script.error
apparaît, comme un point de départ.A response whose type is "error" is known as a network error.
En plus de apsillers réponse, notez que XMLHttpRequest poignées redirige automatiquement en arrière-plan, de sorte que vous n'avez pas à vérifier les codes de réponse dans le
onload
événement (cet événement sera invoqué qu'une seule fois sur le dernier appel). A noter également, que dans le cas où vous envoyez des données de la charge utile avec la méthode POST et si la demande est redirigé, XMLHttpRequest modifier la méthode dePOST
àGET
et efface toutes les données de la charge utile pour des raisons de sécurité. Leonload
événement va encore être invoquée, mais vous aurez besoin de ré-envoyer votre demande à nouveau manuellement vers la nouvelle destination.