Use of native ajax api /** * Use of native ajax api */// simple ajax with timeoutfunction simpleAjax(method, url, data, callback) { var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function () { if (xhr.readyState === 4) { // try-ca
/** * Use of native ajax api */ // simple ajax with timeout function simpleAjax(method, url, data, callback) { var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function () { if (xhr.readyState === 4) { // try-catch is necessary when you use timeout try { if ((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304) { callback(xhr.responseText); } } catch (e) {} } }; xhr.open(method, url, true); xhr.ontimeout = function () { // do something here }; // if method is get, you should set data null xhr.send(data); } // encapsulation of get method function get(url, headers, params, callback) { header = header || {}; params = params || {}; var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function () { if (xhr.readyState === 4) { if ((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304) { callback(xhr.responseText); } } }; var queryList = []; for (var p in params) { if (params.hasOwnProperty(p)) { queryList.push(p + '=' + params[p]); } } var query = queryList.length ? '?' + queryList.join('&') : ''; xhr.open('get', url + query, true); for (var h in headers) { if (headers.hasOwnProperty(h)) { xhr.setRequestHeader(h, headers[h]); } } xhr.send(null); } // encapsulation of post method function post(url, headers, params, callback) { header = header || {}; params = params || {}; var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function () { if (xhr.readyState === 4) { if ((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304) { callback(xhr.responseText); } } }; xhr.open('post', url, true); for (var h in headers) { if (headers.hasOwnProperty(h)) { xhr.setRequestHeader(h, headers[h]); } } var data = new FormData(); for (var p in params) { if (params.hasOwnProperty(p)) { data.append(p, params[p]); } } xhr.send(data); // var form = document.getElementById('user-info'); // xhr.send(new FormData(form)); } /** * load event * process-flow: * loadStart -> * progress(one or more) * -> [error | abort | load](one of them) * -> loaded */ function loadProgress(url, callback) { var xhr = new XMLHttpRequest(); xhr.onload = function () { if ((xhr.status >= 200 && xhr.status < 300) || xhr.status === 304) { callback(xhr.responseText); } }; xhr.onprogress = function (evt) { if (evt.lengthComputable) { console.log(evt.position / evt.totalSize + ' %'); } }; xhr.open('get', url, true); xhr.send(null); }