129 votes

Onload est égal à readyState == 4 dans XMLHttpRequest?

Je suis confus au sujet de l'événement de retour xhr, comme je peux le dire, il n'y a pas tellement de différence entre onreadystatechange -> readyState == 4 et onload, est-ce vrai?

 var xhr = new XMLHttpRequest();
xhr.open("Get", url, false);
xhr.onreadystatechange = function() {
    if (xhr.readyState === 4)
    {
        /* do some thing*/
    }
};

xhr.send(null);
 

ou

 xhr.onload = function() { /* do something */ }
 

164voto

C'est presque toujours vrai. Une différence notable, cependant, est que la onreadystatechange gestionnaire d'événements aussi se déclenche avec readyState==4 dans le cas où la onerror gestionnaire est généralement déclenchée (typiquement un problème de connectivité réseau). Il obtient un statut de 0 dans ce cas. J'ai vérifié ce qui se passe sur le dernier Chrome, Firefox et IE.

Donc, si vous utilisez onerror et ciblent les navigateurs modernes, vous ne devez pas utiliser onreadystatechange mais doit utiliser onload au lieu de cela, ce qui semble être garanti qu'à être appelée lorsque la requête HTTP a terminé avec succès (avec une vraie réponse et le code d'état). Sinon, vous pourriez finir par deux gestionnaires d'événements déclenchés en cas d'erreurs (ce qui est la façon dont je empiriquement constaté à propos de ce cas particulier.)

75voto

Jan Kuča Points 4393

Ce devrait être la même chose. onload été ajouté dans XMLHttpRequest 2 alors que onreadystatechange existe depuis la spécification d'origine.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X