in modules/js/htdocs/component.js [358:458]
HTTPBindingClient.prototype.get = function(id, cb, mode) {
var u = id? (this.uri? this.uri + '/' + id : id) : this.uri;
var hascb = cb? true : false;
// Get from local storage first
var item;
if(mode != 'remote') {
item = HTTPBindingClient.getCacheItem(u);
if(item && item != '') {
if(!hascb)
return item;
// Pass local result to callback
cb(item);
}
}
// Call asynchronously with a callback
if(hascb) {
return HTTPBindingClient.scheduleAsyncRequest(function getRequest(http, done) {
http.open('GET', u, true);
http.setRequestHeader('Accept', '*/*');
http.setRequestHeader('X-Cache-Control', 'no-cache');
http.onreadystatechange = function() {
if(http.readyState == 4) {
// Pass result if different from local result
//debug('readystate', http.readyState, 'status', http.status, 'headers', http.getAllResponseHeaders());
if(http.status == 200) {
var ct = http.getResponseHeader('Content-Type');
if(http.responseText == '' || !ct || ct == '') {
// Report empty response
error('get received empty response', 'url', u);
cb(undefined, new Error('500 No-Content'));
return done();
} else if(!item || http.responseText != item) {
// Store retrieved entry in local storage
//debug('received response', 'url', u, 'response', http.responseText);
if(http.responseText != null)
HTTPBindingClient.setCacheItem(u, http.responseText);
cb(http.responseText);
return done();
}
} else if (http.status == 403) {
// Redirect to login page
error('get received 403 response', 'url', u);
var le = new Error('' + http.status + ' ' + http.statusText);
if(window.onloginredirect)
window.onloginredirect(le);
cb(undefined, le);
return done();
} else if(!http.aborted) {
// Pass exception if we didn't have a local result
error('get received error', 'url', u, 'status', http.status, http.statusText);
if(!item) {
cb(undefined, new Error('' + http.status + ' ' + http.statusText));
return done();
}
}
return done();
}
};
// Send the request
http.send(null);
return true;
}, true);
}
// Call synchronously and return the result or exception
var http = new XMLHttpRequest();
http.open('GET', u, false);
http.setRequestHeader('Accept', '*/*');
http.setRequestHeader('X-Cache-Control', 'no-cache');
http.send(null);
if(http.status == 200) {
var ct = http.getResponseHeader('Content-Type');
if(http.responseText == '' || !ct || ct == '') {
// Report empty response
error('get received empty response', 'url', u);
throw new Error('500 No Content');
}
return http.responseText;
}
if(http.status == 403) {
// Redirect to login page
error('get received 403 response', 'url', u);
var le = new Error('' + http.status + ' ' + http.statusText);
if(window.onloginredirect)
window.onloginredirect(le);
throw le;
}
error('get received error', 'url', u, 'status', http.status, http.statusText);
throw new Error('' + http.status + ' ' + http.statusText);
};