Commit a6164412 by Иван Кубота

Ajax support added

parent 83d38ff3
;(function(){
const transformCfg = function( cfg ){
return Object.assign( {}, cfg, {
headers: Object.assign(
{
'Content-Type': 'application/json',
'Accept': 'application/json'
},
cfg && cfg.headers || {}
)
} );
};
let refreshing = false, refreshed = false;
const xhrProceed = function( method, xhr, cfg, cb ){
xhr.open( method, cfg.url, true );
for( let key in cfg.headers ){
xhr.setRequestHeader( key, cfg.headers[ key ] );
}
xhr.onreadystatechange = function(){
if( xhr.readyState === 4 && xhr.status === 204 ){
cb && cb( false, { error: false } );
return;
}else if( xhr.readyState === 4 && xhr.status >= 200 && xhr.status < 300 ){
let json;
if( cfg.bonus && cfg.bonus.raw )
return cb && cb( false, xhr );
try{
json = JSON.parse( xhr.responseText );
cb && cb( false, json );
}catch( e ){
console.error( 'AJAX:' + method + ' Incorrect Response ← ' + cfg.url, xhr.responseText, e );
cb && cb( true, e );
}
}else if( xhr.status === 404 ){
cb && cb( true );
}else if( xhr.status === 503 ){
// Server is busy
/*
{
"message": "Идет обновление..."
}
*/
}else if( xhr.status === 401 ){
//debugger
//Пользователь не авторизован
if( window.location.pathname !== "/login" ){
if( !refreshed && !refreshing ){
refreshing = true;
ACTION.REFRESH_TOKEN.execute( function( err ){
refreshing = false;
refreshed = !!err;
} );
}else if( !refreshing ){
window.location.pathname = "/login";
}
}
return;
}else if( xhr.status === 403 ){
//Нет доступа к ассистенту
window.location.href = "/";
return;
}else if( xhr.status >= 400 ){
/*HeaderModel.statusNotification.statuses.push({type: 'error'});
setTimeout(function () {
HeaderModel.statusNotification.statuses.length = 0;
}, 3000);*/
cb && cb( true, { "status": "error" } );
return;
}
};
};
const Ajax = {
post( url, data, cb, cfg, method ){
method = method || 'POST';
let stringData = '';
try{
stringData = JSON.stringify( data );
cfg = transformCfg( cfg || {} );
cfg.url = url;
const xhr = new XMLHttpRequest();
xhrProceed( method.toUpperCase(), xhr, cfg, cb );
xhr.send( stringData );
}catch( e ){
/* HeaderModel.statusNotification.statuses.push({type: 'error'});
setTimeout(function () {
HeaderModel.statusNotification.statuses.length = 0;
}, 3000);*/
console.error( 'AJAX:' + method.toUpperCase() + ' → ' + url, e );
cb && cb( true, e );
}
},
put( url, data, cb, cfg ){
Ajax.post( url, data, cb, cfg, 'PUT' );
},
[ 'delete' ]( url, data, cb, cfg ){
Ajax.post( url, data, cb, cfg, 'DELETE' );
},
get( url, cb, cfg ){
try{
cfg = transformCfg( cfg || {} );
cfg.url = url;
const xhr = new XMLHttpRequest();
xhrProceed( "GET", xhr, cfg, cb );
xhr.send( cfg.data || null );
}catch( e ){
/*HeaderModel.statusNotification.statuses.push({type: 'error'});
setTimeout(function () {
HeaderModel.statusNotification.statuses.length = 0;
}, 3000);*/
console.error( 'AJAX:GET → ' + url, e );
cb && cb( true, e );
}
}
};
const AsyncAjax = Ajax.async = {
get( url, cfg ){
return new Promise( function( resolve, reject ){
Ajax.get( url, function( err, data ){
if( err ){
reject( data );
}else{
resolve( data );
}
}, cfg )
} );
},
post( url, data, cfg ){
return new Promise( function( resolve, reject ){
Ajax.post( url, data, function( err, data ){
if( err ){
reject( data );
}else{
resolve( data );
}
}, cfg )
} );
},
put( url, data, cfg ){
return new Promise( function( resolve, reject ){
Ajax.put( url, data, function( err, data ){
if( err ){
reject( data );
}else{
resolve( data );
}
}, cfg )
} );
},
[ 'delete' ]( url, data, cfg ){
return new Promise( function( resolve, reject ){
Ajax[ 'delete' ]( url, data, function( err, data ){
if( err ){
reject( data );
}else{
resolve( data );
}
}, cfg )
} );
}
};
(typeof module === 'object') && (module.exports = Ajax);
(typeof window === 'object') && (window.Ajax = Ajax);
})();
\ No newline at end of file
......@@ -3,7 +3,7 @@ const {minify} = require("terser"),
path = require( 'path'),
DOM = ['DOM.js'],
rDOM = DOM.concat('Observer.js', 'Store.js', 'Transform.js'),
rDOM = DOM.concat('Observer.js', 'Store.js', 'Transform.js', 'Ajax.js'),
dir = 'build',
header = `/* Vanilla.js Reactivity by Ivan Kubota.
* ©Form.dev 2012—${(new Date()).getFullYear()}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment