78 lines
2.4 KiB
JavaScript
78 lines
2.4 KiB
JavaScript
beef.net.cors = {
|
|
|
|
handler: "cors",
|
|
|
|
/**
|
|
* Response Object - used in the beef.net.request callback
|
|
*/
|
|
response:function () {
|
|
this.status = null; // 500, 404, 200, 302, etc
|
|
this.headers = null; // full response headers
|
|
this.body = null; // full response body
|
|
},
|
|
|
|
/**
|
|
* Make a cross-origin request using CORS
|
|
*
|
|
* @param method {String} HTTP verb ('GET', 'POST', 'DELETE', etc.)
|
|
* @param url {String} url
|
|
* @param data {String} request body
|
|
* @param callback {Function} function to callback on completion
|
|
*/
|
|
request: function(method, url, data, callback) {
|
|
|
|
var xhr;
|
|
var response = new this.response;
|
|
|
|
if (XMLHttpRequest) {
|
|
xhr = new XMLHttpRequest();
|
|
|
|
if ('withCredentials' in xhr) {
|
|
xhr.open(method, url, true);
|
|
xhr.onerror = function() {
|
|
};
|
|
xhr.onreadystatechange = function() {
|
|
if (xhr.readyState === 4) {
|
|
response.headers = this.getAllResponseHeaders()
|
|
response.body = this.responseText;
|
|
response.status = this.status;
|
|
if (!!callback) {
|
|
if (!!response) {
|
|
callback(response);
|
|
} else {
|
|
callback('ERROR: No Response. CORS requests may be denied for this resource.')
|
|
}
|
|
}
|
|
}
|
|
};
|
|
xhr.send(data);
|
|
}
|
|
} else if (typeof XDomainRequest != "undefined") {
|
|
xhr = new XDomainRequest();
|
|
xhr.open(method, url);
|
|
xhr.onerror = function() {
|
|
};
|
|
xhr.onload = function() {
|
|
response.headers = this.getAllResponseHeaders()
|
|
response.body = this.responseText;
|
|
response.status = this.status;
|
|
if (!!callback) {
|
|
if (!!response) {
|
|
callback(response);
|
|
} else {
|
|
callback('ERROR: No Response. CORS requests may be denied for this resource.')
|
|
}
|
|
}
|
|
};
|
|
xhr.send(data);
|
|
} else {
|
|
if (!!callback) callback('ERROR: Not Supported. CORS is not supported by the browser. The request was not sent.');
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
beef.regCmp('beef.net.cors');
|
|
|