I'm writing a pixel library to do an AJAX request so I'm not allowed to use any helper. function ajax(options) { var xhr = new XMLHttpRequest(); var opts = Object.assign({ withCredentials: false, method: 'GET' }, options); xhr.withCredentials = options.withCredentials; xhr.open(opts.method, opts.url); xhr.setRequestHeader('Accept', 'text/plain'); xhr.send(null); return { done: function(cb) { xhr.onreadystatechange = function onStateChange() { if (this.readyState === 4) { if (this.status >= 200 && this.status < 300) { cb(this.responseText); } else { cb('error'); } } }; xhr.ontimeout = function(e) { console.error(e); cb(false); }; xhr.onerror = function(e) { console.error(e); cb(false); }; } } }; ajax({ url: '/echo/json' }).done(function(response) { console.log(response); }) I also have my code in a [jsfiddle](https://jsfiddle.net/5ch7b4jo/2/) in case anyone wants to test the code. **Note**: This library doesn't support POST as I want to keep the code as less as possible. It will only support GET.