Support onload/onerror events on XMLHttpRequest.

This commit is contained in:
Hristo Deshev
2015-06-15 14:28:16 +03:00
parent acfb51bba2
commit f109cbe80b
3 changed files with 37 additions and 3 deletions

View File

@ -598,3 +598,21 @@ export var test_XMLHttpRequest_requestShouldBePossibleAfterAbort = function (don
xhr.send(JSON.stringify({ MyVariableOne: "ValueOne", MyVariableTwo: "ValueTwo" }));
};
export function test_raises_onload_Event(done) {
let xhr = new XMLHttpRequest();
xhr.onload = () => {
done(null);
}
xhr.open("GET", "https://httpbin.org/get");
xhr.send();
}
export function test_raises_onerror_Event(done) {
let xhr = new XMLHttpRequest();
xhr.onerror = () => {
done(null);
}
xhr.open("GET", "https://no-such-domain-httpbin.org");
xhr.send();
}

3
declarations.d.ts vendored
View File

@ -38,6 +38,9 @@ declare class XMLHttpRequest {
readyState: number;
responseText: string;
status: number;
onload: () => void;
onerror: () => void;
}
/**

View File

@ -39,6 +39,9 @@ export class XMLHttpRequest {
public LOADING = 3;
public DONE = 4;
public onload: () => void;
public onerror: () => void;
private _options: definition.HttpRequestOptions;
private _readyState: number;
private _status: number;
@ -112,8 +115,9 @@ export class XMLHttpRequest {
}
}).catch(e => {
this._errorFlag = true;
});
this._errorFlag = true;
this._setReadyState(this.DONE);
});
}
}
@ -167,6 +171,15 @@ export class XMLHttpRequest {
this.onreadystatechange();
}
}
if (this._readyState === this.DONE) {
if (this._errorFlag && types.isFunction(this.onerror)) {
this.onerror();
}
if (!this._errorFlag && types.isFunction(this.onload)) {
this.onload();
}
}
}
get responseText(): string {
@ -230,4 +243,4 @@ var statuses = {
503: "Service Unavailable",
504: "Gateway Timeout",
505: "HTTP Version Not Supported"
};
};