/* * AJAX library */ /* Умолчальный путь для запроса шаблонов cl*/ var DefaultURL = '?&template='; /* Type content */ var tcXML='XML'; var tcHTML='HTML'; var tcJSON='JSON'; var tcText='Text'; /* * Send Post */ function clPost(APrm) { /*Установка параметров*/ if (!APrm.FormData) { if (APrm.Form != null) APrm.FormData = new FormData(APrm.Form); else APrm.FormData = new FormData(); } if (APrm.Call) { /* Call controller method */ APrm.URL = clSourceURL('', '&call=' + APrm.Call); if (!APrm.Income) APrm.Income = {}; if (!APrm.Income.TypeContent) APrm.Income.TypeContent = APrm.TypeContent; if (!APrm.Income.TypeContent) APrm.Income.TypeContent = tcJSON; for (var Key in APrm.Income) APrm.FormData.append(Key, APrm.Income[Key]); } else { /* Exec public procedure */ if (!APrm.URL) APrm.URL = ''; if (APrm.DB) APrm.URL=clSourceURL(APrm.URL, '&db=' + APrm.DB); if (APrm.ProcName) APrm.URL=clSourceURL(APrm.URL, DefaultURL+'Autoproc.html&name='+APrm.ProcName); if (APrm.Template) APrm.URL=clSourceURL(APrm.URL, DefaultURL + APrm.Template); if (APrm.Library) APrm.FormData.append('library', APrm.Library); if (!APrm.Convert) APrm.URL=clSourceURL(APrm.URL, '&convert=' + "default"); if (APrm.Content) APrm.URL=clSourceURL(APrm.URL, '&content=' + APrm.Content); else APrm.URL=clSourceURL(APrm.URL, '&content=none'); if (APrm.DomainSource) APrm.URL = APrm.DomainSource + APrm.URL; } var Request = new XMLHttpRequest(); /*устанавливаем процедуры обратного вызова*/ Request.onloadend = function(AResult) { if (APrm.Log) APrm.Log.JobEnd(); if (!APrm.Stoped) { /* Get pure content */ APrm.Content=AResult.target.response; /* Define type content */ if (APrm.Income && APrm.Income.TypeContent) TypeContent = APrm.Income.TypeContent; else TypeContent = tcXML; switch (TypeContent) { case tcJSON: try { APrm.Result = JSON.parse(APrm.Content); } catch (e) { var Error ='Error in JSON result for URL ['+APrm.URL+']'; if (APrm.Log) APrm.Log.Err(Error, true); console.warn(Error, APrm.Content); } break; case tcXML: if (AResult.target && AResult.target.responseXML && AResult.target.responseXML.documentElement) { try { APrm.Result = clDOMToObject(AResult.target.responseXML.documentElement) } catch (e) { } } if (!APrm.Result) { var Error ='Error in XML result for URL ['+APrm.URL+']'; if (APrm.Log) APrm.Log.Err(Error, true); console.warn(Error); console.warn(APrm.Content); } break; } /*обработка пользовательской функции после загрузки при наличии*/ if (APrm.OnAfterLoad) { try { APrm.OnAfterLoad(APrm); } catch (e) { var Error ='Error1 ['+e.message+'] for ['+APrm.URL+']'; if (APrm.Log) APrm.Log.Err(Error, true); else console.warn(Error); } } } }; Request.upload.onprogress = function(AEvent) { if (APrm.OnUploadProgress) APrm.OnUploadProgress(AEvent); }; /*обработчик ошибки вызова*/ Request.upload.onerror = function(AResult) { if (APrm.Log) { APrm.Log.JobEnd(); APrm.Log.Err('Post error', true); } }; /*обработчик отмены вызова*/ Request.upload.onabort = function(AResult) { if (APrm.Log) { that.Log.JobEnd(); that.Log.Err('Post abort', true); } }; /* Выполнение события до загрузки если оно назначено */ if (APrm.OnBeforeLoad) APrm.OnBeforeLoad(APrm); APrm.Stoped = false; if (APrm.Log) APrm.Log.JobBegin(); Request.open("POST", APrm.URL); Request.send(APrm.FormData); return this; }; /* * Check Post Resilt */ function clPostResult(APrm, AHide) { var r = false; if (APrm.Result && APrm.Result.Header) { if (APrm.Result.Header.Code=='Ok') r = true; else if (APrm.Log) APrm.Log.War(APrm.Result.Header.Message, true); } else { if (APrm.Log) APrm.Log.War('Unknown header for ['+APrm.URL+']', true); } return r; }