Monday, October 5, 2009

jQuery의 AJAX전송시 한글문제 좀더 편하게 풀어보자 Script(xml,ajax)































jQuery의 AJAX전송시 한글문제 좀더 편하게 풀어보자 Script(xml,ajax)

2009/02/03 11:35



복사 http://blog.naver.com/kvivaldi/60061867921




Query의 AJAX 기능을 사용하다 보면 특정 서버에 한글이 깨져서 전송 된다. 사실 jQuery의 문제가 아니라 각 브라우져에 탑재된 XMLHTTP모듈의 인코딩 방식에 따라 한글이 깨지거나 안깨지거나 하는 것 같다.
인터넷을 검색해보면 한글 깨짐 문제에 대한 많은 솔루션들이 존재한다. 그것은 전송하려는 값에 encodeURIComponent()함수를 사용하여 인코딩 하는 방법이다. 나 역시도 서버에 값들을 보내기 위해 보내는 값마다 열심히 함수를 붙여서 코딩을 했다.

그러다가 이런 생각이 들었다.
"어차피 죄다 인코딩 해주는거 jQuery 안에서 모두 처리하게 해주면 안되나?"

그래서 jQuery소스의 AJAX관련 코드를 뒤지다가 파라메터들을 직렬화 해주는 함수에 이를 적용할 수 있을 것으로 판단했다. (본 내용은 1.2.6 버전 기준으로 작성)
① 에디터로 jquery-1.2.6.js 을 연다.
② 직렬화 함수인 param함수를 찾는다. (Ctrl+F 하고 param을 쳐보자 ^^)
③ encodeURIComponent()함수를 escape()함수로 싼다. (아래 코드 참조)


   // Serialize an array of form elements or a set of
   // key/values into a query string
   param: function( a ) {
       var s = [];

       // If an array was passed in, assume that it is an array
       // of form elements
       if ( a.constructor == Array || a.jquery )
           // Serialize the form elements
           jQuery.each( a, function(){
               s.push( escape(encodeURIComponent(this.name)) +"=" + escape(encodeURIComponent( this.value )));
           });

       // Otherwise, assume that it's an object of key/value pairs
       else
           // Serialize the key/values
           for ( var j in a )
               // If the value is an array then the key names need to be repeated
               if ( a[j] && a[j].constructor == Array )
                   jQuery.each( a[j], function(){
                       s.push( escape(encodeURIComponent(j)) + "=" + escape(encodeURIComponent( this ) ));
                   });
               else
                   s.push( escape(encodeURIComponent(j)) + "=" +

escape(encodeURIComponent( jQuery.isFunction(a[j]) ? a[j]() : a[j] ) ));


       // Return the resulting serialization
       return s.join("&").replace(/%20/g, "+");
   }

이미 encodeURIComponent()라는 함수로 모든 값들을 처리하고 있었다. 이미 인코딩 처리를 하고 있는데 무엇이 문제였을까 하고 계속 검색하다가 찾은 방법이 escape()라는 함수를 덧 붙여 사용하는 방법이다.

이 방법을 사용하면 각자 작성하는 코드에서 값마다 일일이 인코딩 처리를 안해주어도 된다.
그러나 정작 작성하고도 왜 escape()를 붙였을 경우 제대로 전송이 되는지에 대해서는 이해가 가지 않는다.
혹시 이 글을 본 다른 개발자 분들의 조언을 부탁드리며...

http://elemen.tistory.com/45



이 포스트를..  


덧글 쓰기 엮인글 쓰기 공감하기











































No comments: