123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394 |
- /**
- * Ajax(Asynchronous JavaScript + XML)
- * XmlHttpRequest를 이용해 WAS와 통신할 수 있는 기능을 제공
- */
- /**
- * Debug 활성화
- */
- var xmlhttp_debug = false;
- /**
- * XmlHttpRequest 객체 생성
- */
- function createXmlHttpRequest() {
- var xmlHttpRequest = null;
- try {
- if (window.XMLHttpRequest) {
- // If IE7, Mozilla, Safari, and so on: Use native object
- xmlHttpRequest = new XMLHttpRequest();
- } else {
- xmlHttpRequest = getXxmlHttpRequest();
- }
- return xmlHttpRequest;
- } catch (errorObject) {
- showErrorDlg('createXmlHttpRequest()', errorObject);
- }
- }
- /**
- * XmlHttpRequest 객체 생성
- */
- function getXxmlHttpRequest() {
- var xmlhttps = new Array("Msxml2.XMLHTTP.7.0", "Msxml2.XMLHTTP.6.0",
- "Msxml2.XMLHTTP.5.0", "Msxml2.XMLHTTP.4.0", "Msxml2.XMLHTTP.3.0",
- "Msxml2.XMLHTTP", "Microsoft.XMLHTTP");
- for (var i = 0; i < xmlhttps.length; i++) {
- try {
- var obj = new ActiveXObject(xmlhttps[i]);
- return obj;
- } catch (errorObject) {
- }
- }
- alert("귀하에 PC에는 XmlHttp Objec가 설치되어 있지 않습니다.\n\n자세한 내용은 전산실로 문의하시기 바랍니다.");
- return null;
- }
- /**
- * 데이터를 WAS로 전송 actionUrl : 데이터가 전송 되어질 URL or URI event : 전달 Event formObject :
- * 전달될 데이터(Form element of HTML)
- */
- function submitXmlRequest(actionUrl, event, formObject, resultType, isLockForm) {
- if (isLockForm == null)
- isLockForm = true;
- if (formObject == null)
- return false;
- if (formObject.isSubmit == true || formObject.isSubmit == "true") {
- return false;
- }
- if (formObject != null && isLockForm == true)
- formObject.isSubmit = true;
- var xmlHttpRequest = createXmlHttpRequest();
- try {
- xmlHttpRequest.open('POST', actionUrl, true);
- xmlHttpRequest.setRequestHeader('Content-Type',
- 'application/x-www-form-urlencoded;');
- xmlHttpRequest.setRequestHeader('Request-Type', 'XmlHttpRequest');
- xmlHttpRequest.onreadystatechange = function() {
- if (xmlHttpRequest.readyState == 4) {
- hideLoadingBar(); //중복 요청을 막기 위하여 로딩바 추가 2019.08.23
- switch (xmlHttpRequest.status) {
- case 200:
- if (xmlhttp_debug)
- alert(xmlHttpRequest.responseText);
- parseXml(xmlHttpRequest.responseXML,
- xmlHttpRequest.responseText);
- break;
- default:
- var msg = "";
- msg += "URL : " + actionUrl + "\n\n";
- msg += "Status : " + xmlHttpRequest.status + "\n\n";
- msg += "Text : " + xmlHttpRequest.statusText + "\n\n";
- alert(msg);
- break;
- }
- }
- };
- var data = formData2QueryString(formObject);
- if (resultType != null)
- data += "&result_type=" + resultType;
- if (xmlhttp_debug)
- alert("fevent=" + URLEncode(event) + "&" + data);
- xmlHttpRequest.send("fevent=" + URLEncode(event) + "&" + data);
- showLoadingBar(); //중복 요청을 막기 위하여 로딩바 추가 2019.08.23
- return true;
- } catch (errorObject) {
- showErrorDlg("submitXmlRequest()", errorObject);
- formObject.isSubmit = false;
- return false;
- }
- }
- /**
- * Form Object의 데이터값을 추출하여 리턴 (application/x-www-form-urlencoded MIME 형식으로 변환)
- */
- function formData2QueryString(formObject) {
- if (formObject == null)
- return "";
- var submitString = '';
- var formElement = '';
- //var lastElementName = '';
- try {
- for (var i = 0; i < formObject.elements.length; i++) {
- formElement = formObject.elements[i];
- if (formElement.name == "fevent")
- continue;
- if (formElement.is_html_editor == "true") {
- formElement.value = getHTMLValue(formElement.name);
- }
- switch (formElement.type) {
- case 'text':
- case 'select-one':
- case 'hidden':
- case 'password':
- case 'textarea':
- submitString += formElement.name + '='
- + URLEncode(formElement.value) + '&';
- break;
- case 'radio':
- if (formElement.checked) {
- submitString += formElement.name + '='
- + URLEncode(formElement.value) + '&';
- }
- break;
- case 'checkbox':
- if (formElement.checked) {
- // if(formElement.name = lastElementName) {
- // if(submitString.lastIndexOf('&') == submitString.length -
- // 1) {
- // submitString = submitString.substring(0,
- // submitString.length - 1);
- // }
- // submitString += ',' + URLEncode(formElement.value);
- // }
- // else {
- submitString += formElement.name + '='
- + URLEncode(formElement.value);
- // }
- submitString += '&';
- // lastElementName = formElement.name;
- }
- break;
- case 'select-multiple':
- for (var j = 0; j < formElement.length; j++) {
- if (formElement.options[j].selected == true) {
- submitString += formElement.name + '='
- + URLEncode(formElement.options[j].value) + '&';
- }
- }
- break;
- }
- }
- submitString = submitString.substring(0, submitString.length - 1);
- return submitString;
- } catch (errorObject) {
- showErrorDlg("formData2QueryString()", errorObject);
- }
- }
- /**
- * String을 application/x-www-form-urlencoded MIME 형식으로 변환
- */
- function URLEncode(str) {
- return encodeURIComponent(str);
- }
- /**
- * 결과메세지를 Parsing 처리 return : Result(result.js 참조)
- */
- function parseXml(responseXML, responseText, resultType) {
- try {
- var resultNodeList = responseXML.getElementsByTagName("RESULT");
- var rootNode = resultNodeList.item(0);
- var resultType = rootNode.getAttribute("type");
- var requestNodeList = rootNode.getElementsByTagName("REQUEST");
- var requestNode = requestNodeList.item(0);
- var requestUri = requestNode.getAttribute("uri");
- var requestEvent = requestNode.getAttribute("event");
- var requestParameter = rootNode.getElementsByTagName("REQUEST").item(0).text;
- var success = rootNode.getElementsByTagName("SUCCESS").item(0).getAttribute("value");
- //var message = rootNode.getElementsByTagName("SUCCESS").item(0).text;
- var message = rootNode.getElementsByTagName("SUCCESS").item(0).childNodes[0].nodeValue;
- var detailMessage = "";
- if (rootNode.getElementsByTagName("DETAIL-MESSAGE").item(0) != null)
- detailMessage = rootNode.getElementsByTagName("DETAIL-MESSAGE").item(0).childNodes[0].nodeValue;
- //detailMessage = rootNode.getElementsByTagName("DETAIL-MESSAGE").item(0).text;
- var resultObject = new Result(resultType, requestUri, requestEvent);
- resultObject.setRequestParameter(requestParameter);
- if (success.toLowerCase() == "true") {
- success = true;
- } else if (success.toLowerCase() == "false") {
- success = false;
- }
- resultObject.setSuccess(success);
- resultObject.setMessage(message);
- resultObject.setDetailMessage(detailMessage);
- if (resultType.toLowerCase() == "success") {
- // 추가 Parsing 없음
- } else if (resultType.toLowerCase() == "select") {
- var voNode = rootNode.getElementsByTagName("VALUE-OBJECT").item(0);
- var vo = new ValueObject();
- var size = voNode.getAttribute("size");
- for (var i = 0; i < size; i++) {
- var key = voNode.getElementsByTagName("VALUE").item(i)
- .getAttribute("name");
- var value = voNode.getElementsByTagName("VALUE").item(i).text;
- vo.set(key, value);
- }
- resultObject.setSelect(vo);
- } else if (resultType.toLowerCase() == "valueobject") {
- var voNode = rootNode.getElementsByTagName("VALUE-OBJECT").item(0);
- var vo = new ValueObject();
- var size = voNode.getAttribute("size");
- for (var i = 0; i < size; i++) {
- var key = voNode.getElementsByTagName("VALUE").item(i)
- .getAttribute("name");
- var value = voNode.getElementsByTagName("VALUE").item(i).childNodes[0].nodeValue;
- vo.set(key, value);
- }
- resultObject.setValueObject(vo);
- } else if (resultType.toLowerCase() == "rowset") {
- var rowSetNode = rootNode.getElementsByTagName("ROW-SET").item(0);
- var colSize = rowSetNode.getAttribute("cols");
- var rowSize = rowSetNode.getAttribute("rows");
- var rowSet = new RowSet();
- for (var i = 0; i < rowSize; i++) {
- var rowNode = rowSetNode.getElementsByTagName("ROW").item(i);
- //var rowIndex = rowNode.getAttribute("index");
- var row = new Row();
- for (var j = 0; j < colSize; j++) {
- var columnNode = rowNode.getElementsByTagName("COLUMN")
- .item(j);
- var name = columnNode.getAttribute("name");
- var value = columnNode.childNodes[0].nodeValue;
- row.set(name, value);
- }
- rowSet.setRow(row);
- }
- resultObject.setRowSet(rowSet);
- } else if (resultType.toLowerCase() == "xml") {
- var xml = rootNode.getElementsByTagName("XML").item(0).xml;
- resultObject.setXml(xml);
- } else {
- alert("알수 없는 메세지 타입 입니다.\n\ntype : " + resultType);
- }
- try {
- if (doResult != null) {
- doResult(resultObject);
- } else {
- alert("doResult() 함수가 없습니다.");
- }
- } catch (errorObject) {
- showErrorDlg("doResult()", errorObject);
- }
- } catch (errorObject) {
- alert("XML을 분석할 수없습니다.\n\nXML :\n" + responseText);
- showErrorDlg("parseXml()", errorObject);
- }
- }
- /**
- * 데이터를 WAS로 전송 actionUrl : 데이터가 전송 되어질 URL or URI event : 전달 Event formObject :
- * 전달될 데이터(Form element of HTML)
- */
- function submitXmlHttpRequest(actionUrl, event, formObject, isLockForm,
- resultType) {
- if (isLockForm == null)
- isLockForm = true;
- if (formObject == null)
- return false;
- if (formObject.isSubmit == true || formObject.isSubmit == "true") {
- return false;
- }
- if (formObject != null && isLockForm == true)
- formObject.isSubmit = true;
- try {
- xmlHttpRequest = new ActiveXObject("Msxml2.XMLHTTP");
- } catch (e) {
- try {
- xmlHttpRequest = new ActiveXObject("Microsoft.XMLHTTP");
- } catch (e2) {
- xmlHttpRequest = false;
- }
- }
- if (!xmlHttpRequest && typeof XMLHttpRequest != 'undefined') {
- try {
- xmlHttpRequest = new XMLHttpRequest();
- } catch (failed) {
- xmlHttpRequest = false;
- }
- }
- if (!xmlHttpRequest)
- alert("Error initializing XMLHttpRequest!");
- try {
- xmlHttpRequest.open('POST', actionUrl, true);
- xmlHttpRequest.setRequestHeader('Content-Type',
- 'application/x-www-form-urlencoded;');
- xmlHttpRequest.setRequestHeader('Request-Type', 'XmlHttpRequest');
- xmlHttpRequest.onreadystatechange = function() {
- if (xmlHttpRequest.readyState == 4) {
-
- hideLoadingBar(); //중복 요청을 막기 위하여 로딩바 추가 2019.08.23
-
- switch (xmlHttpRequest.status) {
- case 200:
- var responseText = xmlHttpRequest.responseText.replace(
- /^\s\s*/, '').replace(/\s\s*$/, '');
- var resultObject = new Result(resultType, actionUrl, event);
- resultObject.setXml(responseText);
- resultObject.setSuccess(true);
- doResult(resultObject);
- break;
- default:
- var msg = "";
- msg += "URL : " + actionUrl + "\n\n";
- msg += "Status : " + xmlHttpRequest.status + "\n\n";
- msg += "Text : " + xmlHttpRequest.statusText + "\n\n";
- alert(msg);
- break;
- }
- }
- };
- var data = formData2QueryString(formObject);
- if (resultType != null)
- data += "&result_type=" + resultType;
- if (xmlhttp_debug)
- alert("fevent=" + URLEncode(event) + "&" + data);
- xmlHttpRequest.send("fevent=" + URLEncode(event) + "&" + data);
- showLoadingBar(); //중복 요청을 막기 위하여 로딩바 추가 2019.08.23
- return true;
- } catch (errorObject) {
- showErrorDlg("submitXmlRequest()", errorObject);
- formObject.isSubmit = false;
- return false;
- }
- }
|