안규 공부방

ACTIVE SERVER PAGE > ajax 전송시 한글깨짐 (ANSI - ANSI 간에 한글전송 예제)

등록일 : 2017-07-04 18:27 조회수 : 98,170

ANSI 문자셋으로 된 사이트에서  ajax 전송시 한글이 깨지게 됩니다.

이 문제를 해결하기 위한 방법 입니다.

1. escape , unescape 사용하기
 

		ANSI 로 저장된 ASP 파일
		======== jquery 전송과 결과값 받을 때 ====================
		$.ajax({
			 type: "POST",
			 url: "/include/getServerData.asp",
			 data: "dataKind=leagueList&key1="+escape(sportNM),
			 success: function(rValue)	 {
				 alert(rValue);
			 }
		});
	 
		ANSI로 저장된 ASP 파일
		========== 서버단 asp 파일에서 Request 할 때 ==============
		<%response.charset = "euc-kr"%>

		key1 = unescape(Request("key1"))

		Response.Write strTemp 

전송시 한글변수에 escape("한글") 과 같은 형태로 인코딩해 주면 됩니다.

asp 에서 데이터를 받을때는 unescape(Request("key1")) 로 받아 주면 끝났니다.



2. utf-8 을 지원하는 컴포넌트 사용하기

- utf-8을 지원하는 컴포넌트를 사용해서 넘어온 값을 받아주면 아주 간단히 해결할 수 있다.
- 본인의 경우 ABCUpload 컴포넌트를 사용하여서 간단히 처리한다.
- 페이지 상단에 jquery.form.js 파일을 인클루드 시킨다.
-

test1.asp
 
	function Upload() {
			
			var options = {
				beforeSubmit: function () {

					if ($('#board_fname1').val() == "") {
						alert("업로드할 파일을 선택해 주세요!");
						return false;
					}
				},
				success: function (data) {
						if (/(MSIE|Trident)/.test(navigator.userAgent)) { 
							// ie 일때 input[type=file] init.
							$("#board_fname1").replaceWith( $("#board_fname1").clone(true) );
						} else {
							 // other browser 일때 input[type=file] init.
							$("#board_fname1").val("");
						}

					var status		= data.status;
					var fn1			= data.fn;
					var goods_title = data.goods_title;
					var goods_ment	= data.goods_ment;
					var tname		= data.tname;
					
					alert(status);
					alert(fn1);
					alert(tname);

					}
				},
				error :  function (jqXHR, exception) {
					var msg = '';
					
					if (jqXHR.status === 0) {
						msg = 'Not connect.\n Verify Network.';
					} else if (jqXHR.status == 404) {
						msg = 'Requested page not found. [404]';
					} else if (jqXHR.status == 500) {
						msg = 'Internal Server Error [500].';
					} else if (exception === 'parsererror') {
						msg = 'Requested JSON parse failed.';
					} else if (exception === 'timeout') {
						msg = 'Time out error.';
					} else if (exception === 'abort') {
						msg = 'Ajax request aborted.';
					} else {
						msg = 'Uncaught Error.\n' + jqXHR.responseText;
					}
					alert(msg);
				},
				url: "test_Upload.asp",
				contentType: "multipart/form-data;charset=utf-8",
				type: "post", /* get, post */
				dataType: "json" /* xml, html, script, json */
			};


			$("#frm_board").ajaxSubmit(options);

		}

form ID="frm_board" 값을 submit 하는 예제 이다. ENCTYPE="MULTIPART/FORM-DATA" 데이터타입으로 전송한다.

- 아래는 test_Upload.asp 파일 내용이다.
- abcupload 컴포넌트에서 값을 받을 때 UploadForm("tname")(1) 과 같은 형태로 받으면 된다.
- 배열형태로 전송이 되면 UploadForm("tname")  에는 ANSI 값이 UploadForm("tname")(1) 에는 UTF-8 값이 전송되는걸
확인할 수 있을 것이다.
 
	
		set FSO					= Server.CreateObject("Scripting.FileSystemObject")
		set UploadForm				= Server.CreateObject("ABCUpload4.XForm") 
		'UploadForm.CodePage		= 65001
		UploadForm.Overwrite		= True														'덮어쓰기 허용
		UploadForm.AbsolutePath		= True
		UploadForm.MaxUploadSize		= 1024*1024*20												'파일용량 (10M)

		tname					= WORD_CHANGE(UploadForm("tname")(1),100)
		goods_title					= WORD_CHANGE(UploadForm("goods_title")(1),100)	
		goods_ment				= WORD_CHANGE(UploadForm("goods_ment")(1),100)	
		
		
		Response.Write "{""status"":""SUCCESS"",""fn"":""" & ok_filename & """,""tname"":""" & tname &""",""goods_title"":"""& goods_title &""",""goods_ment"":"""& goods_ment &"""}"
		
파일업로드 로직은 빠져 있다.
 
※ 혹시 도움이 되셨다면 댓글에 한마디 남겨주세요!
작성자   비밀번호
자동글 방지     (자동글 방지 기능입니다.)
내용   댓글달기 
이메일 문의 : cak0280@nate.com  
Copyright 2000 By ENTERSOFT.KR All Rights Reserved.