// a url (naming it a, because it will be reused to store callbacks) // e timeout error placeholder to avoid using var, not to be used // xhr placeholder to avoid using var, not to be used function pegasus(a, e, xhr) { xhr = new XMLHttpRequest(); // Set URL xhr.open('GET', a); // Don't need a to store URL anymore // Reuse it to store callbacks a = []; pegasus.timeout && (xhr.timeout = pegasus.timeout); xhr.ontimeout = function (event) { e = event } xhr.onreadystatechange = xhr.then = function(onSuccess, onError, cb, data) { // Test if onSuccess is a function // Means that the user called xhr.then if (onSuccess && onSuccess.call) { a = [,onSuccess, onError]; } // Test if there's a timeout error e && a[2] && a[2](e, xhr) // Test if request is complete if (xhr.readyState == 4) { // index will be: // 0 if undefined // 1 if status is between 200 and 399 // 2 if status is over cb = a[0|xhr.status / 200]; if (cb) { /*try { data = JSON.parse(xhr.responseText) // NICKY FIX -- don't be helpful } catch (e) {*/ data = null; //} cb(data, xhr); } } }; // Send the GET request xhr.send(); // Return request return xhr; }