axisj icon indicating copy to clipboard operation
axisj copied to clipboard

AXGrid에서 setList() 사용 시 오류 개선요구..

Open zeroty opened this issue 9 years ago • 3 comments

안녕하세요.

AXGrid 사용 시 setList()할 때 ajaxPars값을 오브젝트로 넘기려고 할 때 오류 부분에 있네요.

또한, 검색어를 &를 넣을 때도 오류가 납니다.

이 부분은 axdom.fn.serializeObject에서도 비슷한 문제가 있었는데요.

폼 안에 &나 =같은 특수문자를 넣게 되면 데이터가 잘리는 현상이 있어서 AxisJ에서 제공하는

직렬화메소드를 사용하지 않고, 저희는 이름이 중복되는 이유로 serializeObject2를

만들어 사용하고 있습니다.

$.fn.serializeObject2 = function()
{
    var o = {};
    var a = this.serializeArray();
    $.each(a, function() {
        if (o[this.name] !== undefined) {
            if (!o[this.name].push) {
                o[this.name] = [o[this.name]];
            }
            o[this.name].push(this.value || '');
        } else {
            o[this.name] = this.value || '';
        }
    });

    return o;
};

아래는 예시입니다.

a.jsp

//검색화면에서 검색 버튼 클릭시(AXSearch 미사용)
         var params = $("#searchForm").getFormObject(); //form 내에 데이터를 오브젝트 형태(name, value) 값으로 변환해서 가져옴.
         grid.setList({
                contentType: "application/json; charset=utf-8",
                type: "POST",
                dataType: "json",  
                 ajaxUrl:  "/json/system/userList.json",  
                 ajaxPars: params,  
                 onLoad:function() {
                 }
              });

AXJ.all.js 변경..
-- 15327라인 근처
            var pars;
            if (Object.isString(obj.ajaxPars)) {
                appendPars.push(obj.ajaxPars);
                pars = appendPars.join('&');
            }
            else if (Object.isObject(obj.ajaxPars)) {
                appendPars.push(axdom.param(obj.ajaxPars));
                obj.ajaxPars.pageNo = ((exts == "paging") ? this.page.pageNo : 1);
                obj.ajaxPars.pageSize = this.page.pageSize;
                pars = obj.ajaxPars;
            }

감사합니다.

zeroty avatar Apr 21 '16 04:04 zeroty

params를 var params = $("#searchForm").serialize() 이렇게 사용하시면 안되는 경우인가요?

         var params = $("#searchForm").serialize() // params를 이렇게...
         grid.setList({
                contentType: "application/json; charset=utf-8",
                type: "POST",
                dataType: "json",  
                 ajaxUrl:  "/json/system/userList.json",  
                 ajaxPars: params,  
                 onLoad:function() {
                 }
              });

hyunjun19 avatar Apr 21 '16 15:04 hyunjun19

var params = $("#searchForm").serialize();를 하게 되면 한글이

%ED%95%9C%EA%B8%80 모양으로 변환됩니다.

이럴 경우 다시 한번 %ED%95%9C%EA%B8%80->문자열로 파싱처리를 해야하는 번거로움이

있네요.

zeroty avatar Apr 22 '16 04:04 zeroty

encodeURIComponent('한글') -> "%ED%95%9C%EA%B8%80" 한글이나 특수문자등은 당연히 인코딩되어서 서버로 전달되어야 합니다. 그렇지 않으면 특수문자등의 문제가 생기게 됩니다. https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent 위 링크를 참고하세요. 그리고 벡엔드 언어를 뭘사용하시는지 모르겠지만 요즘 대부분의 웹프레임워크는 다 자동으로 decoding을 해줍니다.

hyunjun19 avatar Apr 22 '16 15:04 hyunjun19