Skip to content
This repository was archived by the owner on Feb 26, 2024. It is now read-only.

fix(xhr): inner onreadystatechange should not use zoneAwareListener #800

Merged
merged 1 commit into from
Jun 5, 2017

Conversation

JiaLiPassion
Copy link
Collaborator

@JiaLiPassion JiaLiPassion commented Jun 3, 2017

fix angular/angular#17167,
zone.js will patch xhr, and add onreadystatechange internally,
this onreadystatechange just for invoke the xhr MacroTask, so it should
not trigger ZoneSpec's callback.

in this commit, use original native addEventListener/removeEventListener
to add internal onreadystatechange event listener.

if (listener) {
  // don't use patched removeEventListener
  oriRemoveListener.apply(data.target, ['readystatechange', listener]);
}
const newListener = data.target[XHR_LISTENER] = () => {
    if (data.target.readyState === data.target.DONE) {
    // sometimes on some browsers XMLHttpRequest will fire onreadystatechange with
    // readyState=4 multiple times, so we need to check task state here
    if (!data.aborted && (XMLHttpRequest as any)[XHR_SCHEDULED] &&
        task.state === 'scheduled') {
      task.invoke();   
    }
  }
};      
// don't use patched addEventListener
oriAddListener.apply(data.target, ['readystatechange', newListener]);

fix angular/angular#17167,
zone.js will patch xhr, and add onreadystatechange internally,
this onreadystatechange just for invoke the xhr MacroTask, so it should
not trigger ZoneSpec's callback.

in this commit, use original native addEventListener/removeEventListener
to add internal onreadystatechange event listener.
@JiaLiPassion JiaLiPassion changed the title fix(xhr): inner onreadystatechange should not triigger Zone callback fix(xhr): inner onreadystatechange should not use zoneAwareListener Jun 3, 2017
@mhevery mhevery merged commit 7bd1418 into angular:master Jun 5, 2017
@MattJeanes
Copy link

This seems to have broken IE support (at least from my testing), raised an issue here: #816

@JiaLiPassion JiaLiPassion deleted the listener branch July 13, 2017 04:26
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Change detection kicked of 4 times for each XMLHttpRequest
4 participants