Skip to content

Commit 2eeb205

Browse files
committed
CORS support for IE9 via XDomainRequest.
Fixes d3#776.
1 parent f23852a commit 2eeb205

3 files changed

Lines changed: 24 additions & 21 deletions

File tree

d3.js

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -390,13 +390,14 @@
390390
return n ? Math.round(x * (n = Math.pow(10, n))) / n : Math.round(x);
391391
};
392392
d3.xhr = function(url, mimeType, callback) {
393-
var xhr = {}, dispatch = d3.dispatch("progress", "load", "error"), headers = {}, response = d3_identity, request = new XMLHttpRequest();
394-
request.onreadystatechange = function() {
395-
if (request.readyState === 4) {
396-
var s = request.status;
397-
!s && request.response || s >= 200 && s < 300 || s === 304 ? dispatch.load.call(xhr, response.call(xhr, request)) : dispatch.error.call(xhr, request);
398-
}
393+
var xhr = {}, dispatch = d3.dispatch("progress", "load", "error"), headers = {}, response = d3_identity, request = new (window.XDomainRequest && /^(http(s)?:)?\/\//.test(url) ? XDomainRequest : XMLHttpRequest)();
394+
"onload" in request ? request.onload = request.onerror = respond : request.onreadystatechange = function() {
395+
request.readyState > 3 && respond();
399396
};
397+
function respond() {
398+
var s = request.status;
399+
!s && request.responseText || s >= 200 && s < 300 || s === 304 ? dispatch.load.call(xhr, response.call(xhr, request)) : dispatch.error.call(xhr, request);
400+
}
400401
request.onprogress = function(event) {
401402
var o = d3.event;
402403
d3.event = event;
@@ -430,7 +431,7 @@
430431
if (arguments.length === 2 && typeof data === "function") callback = data, data = null;
431432
request.open(method, url, true);
432433
if (mimeType != null && !("accept" in headers)) headers["accept"] = mimeType + ",*/*";
433-
for (var name in headers) request.setRequestHeader(name, headers[name]);
434+
if (request.setRequestHeader) for (var name in headers) request.setRequestHeader(name, headers[name]);
434435
if (mimeType != null && request.overrideMimeType) request.overrideMimeType(mimeType);
435436
if (callback != null) xhr.on("error", callback).on("load", function(request) {
436437
callback(null, request);

0 commit comments

Comments
 (0)