Create a gist now

Instantly share code, notes, and snippets.

Embed
XMLHttpRequest wrapped into a promise
function xhr(options) {
var deferred = Q.defer(),
req = new XMLHttpRequest();
req.open(options.method || 'GET', options.url, true);
// Set request headers if provided.
Object.keys(options.headers || {}).forEach(function (key) {
req.setRequestHeader(key, options.headers[key]);
});
req.onreadystatechange = function(e) {
if(req.readyState !== 4) {
return;
}
if([200,304].indexOf(req.status) === -1) {
deferred.reject(new Error('Server responded with a status of ' + req.status));
} else {
deferred.resolve(e.target.result);
}
};
req.send(options.data || void 0);
return deferred.promise;
}
@domenic

This comment has been minimized.

Show comment
Hide comment
@domenic

domenic Jul 12, 2012

You should reject with Error instances, just like you throw with them :)

domenic commented Jul 12, 2012

You should reject with Error instances, just like you throw with them :)

@matthewp

This comment has been minimized.

Show comment
Hide comment
@matthewp

matthewp Jul 12, 2012

Good point, but isn't this something Q should handle internally?

Owner

matthewp commented Jul 12, 2012

Good point, but isn't this something Q should handle internally?

@nathanboktae

This comment has been minimized.

Show comment
Hide comment
@nathanboktae

nathanboktae Dec 9, 2012

You mean e.target.response not e.target.result

You mean e.target.response not e.target.result

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment