'get query'에 해당되는 글 1건

  1. 2009/01/22 귀천 웹 인코딩 문제와 삽질들
보통 웹 어플리케이션을 개발할때 누구나 겪는 encoding 문제 및 삽질.
그중에 제가 겪은 몇가지를 추려 봤습니다.

1. 클라이언트에서 서버측으로 쿼리를 날릴때
아스키 코드는 문제가 없이 잘 갑니다.
하지만, 아스키 코드가 아닌 한글이나 다른 나라의 언어들은 웹 브라우져가
퍼센트 인코딩(% 와 아스키 등으로 이루어진) 을 해서 서버측으로 전송을 합니다.

그런데 IE 6.0~ IE7.0 beta 2 까지는 저 퍼센트 인코딩이 제대로 안되는 버그가 있습니다.
물론 Firefox 등에서는 문제가 없이 전송이 되지요.

따라서 해결책은 데이터를 전송하기 전에 encodeURIComponent 라는 javascript 함수로
 자체적으로 미리 퍼센트 인코딩을 해서 서버측에 넘겨주어야 합니다.
서버 측에서는 decodeURIComponent 등의 디코드 함수를 통해 디코딩을 해서 이용하면 됩니다.

 2. ajax 로 개발을 하던중에, get 방식으로 계속 데이터를 전송해서 DB에 까지 갱신을 했는데
이상하게 웹 브라우저에서는 갱신이 안됩니다.  알고보니 GET 방식의 데이터 전송의 경우
가능한 어떤방식으로든(웹 브라우저 혹은 웹서버 측에서도..) 캐쉬된 데이터를 가져오게 되어 있습니다.
그래서 방법은, POST 방식을 쓰면 되는데 어쩔수 없이 GET 방식을 써야 한다면 쿼리를 날릴때
쿼리에 변형을 주면 됩니다. 어떤 데이터를 요청 하는데 계속 같은 URL 로 요청을 한다면
서버측에서 갱신된 데이터를 주지 않고 cache 된 데이터를 줄 것 입니다.

따라서 URL 을 변형해 줍니다. 그래서 의미없는 값을 뒤에다가 같이 보내주곤 합니다.
그래서 보통 javascript 의 Date().getTime() 함수로 시간을 얻어서 이 값을 url 과 함께 보내주면
갱신된 결과를 가지고 올 수 있습니다.

3. 종종 디자이너가 작업한 Flash 결과물과, javascript 을 연동해야 할 일이 생깁니다.
플래시 이벤트 발생시 페이지를 변경 한다던가 하는 등의 일이 필요하죠. 그런데 이전까지 사용해 오던
getURL("javascript:function()"); 방식으로는 더이상 javascript call 을 할 수 없게 됐습니다.
이 문제로 기존에 있던 수많은 flash 들이 문제를 일으켜서 Adobe 가 욕을 좀 먹었죠..

이는 Flash 의 보안 관련 변경사항 때문입니다.
그래서 이제는 저런 방식으로는 javascript call 이 안되고 external 모듈을 이용해야 합니다.
사용법은 다음과 같습니다.

import flash.external.*; // 모듈을 import 하고
ExternalInterface.call("javascript_function_name" , parameters ... ); // 여기서 call

인자는 자바스크립 함수가 필요한 만큼 가변적으로 그냥 넘기면 됩니다.
그리고 이 flash 파일을 html 페이지에 embed 할때는 다음과 같은 markup 이 있어야 합니다.

<param value="always" name="allowScriptAccess"/>
<embed src = ~~~ 여기에 속성 allowscriptaccess="always" >

이렇게 추가 해주거나 기존의 것을 수정해주면 됩니다.



2009/01/22 14:45 2009/01/22 14:45
받은 트랙백이 없고, 댓글이 없습니다.

댓글+트랙백 RSS :: http://maya.jaram.org/blog/bth/rss/response/25

댓글+트랙백 ATOM :: http://maya.jaram.org/blog/bth/atom/response/25