JavaScript/ajax2014. 3. 10. 00:32
반응형

 ajax와 java를 이용한 웹 서비스 개발은 진행 하던중 ie에서 전달된 파라메터가 서버사이드에서 ???처럼 깨지는 현상이 발생하여 원인을 조사해 본 결과 아래와 같은 점을 발견하게 되었다.


Internet Explorer 10의 경우


FireFox의 경우


Chrome의 경우


 위 처럼 익스플로러의 경우 ajax콜의 경우 get으로 지정된 파라메터가 URL인코딩 되지 않고 그냥 전달되는 차이점이 있어서 서버사이드의 파라메터 처리의 구현에 따라 (전달받은 파라메터를 URL디코딩 하거나 하지 않거나) 다르게 동작하게 된다.


 일반적인 웹 서비스 구현의 경우 전달받은 파라메터를 URL디코딩 하는 것이 일반적이므로 ajax콜의 경우 아래처럼 URL인코딩을 하여 전달하므로서 브라우저 종류에 상관없이 일관적인 동작을 할수 있도록 해주는 것이 좋을 듯하다. 아래의 예 처럼 encodeURI펑션을 이용하여 전달할 파라메터를 인코딩 처리 해주면 된다.



<script type="text/javascript">
var url="test.html";
var params="param1=한글";
$.ajax({
    type:"GET",  
    url:url,
    data:encodeURI(params),
    success:function(args){
        alert(args);
    },   
    error:function(e){
        alert(e.responseText);
    }  
});  
</script>


 간단한 테스트를 진행해본 결과 ie의 경우 url을 직접입력한 경우와 ajax를 통한 파라메터의 경우는 인코딩 처리되지 않지만 form submit을 통한 파라메터 전달의 경우는 인코딩 처리된다.


 브라우저 별로 동작이 다른경우가 있으므로 결론적으로는 같은 동작이 되도록 구현할 수 있어야 할 듯하다.


Posted by Reiphiel