98..Etc/jQuery2014. 5. 21. 15:46
반응형

출처 : http://jhoonslife.tistory.com/524


jqGrid postData 처리시 주의 사항 !


jqGrid 에서 postData 처리를 위해서는 javascript 객체 형식을 써야 합니다.


좋은예와 안좋은예를 보여드리겠습니다.


안좋은예


$("#grid").jqGrid({

  url:'url.do'

, datatype: 'json'

  , mtype: 'POST'

  , page : 1

  , rowNum : 10

postData : "param1="+$("#param1").val() + "&param2="+$("#param2").val()

...



좋은예

$("#grid").jqGrid({

  url:'url.do'

, datatype: 'json'

  , mtype: 'POST'

  , page : 1

  , rowNum : 10

        , postData : { 

jobReqId:$("#jobReqId").val(), 

srcWkptId:$("#selSrcWkptId").val() 

}...



두가지의 차이점은 
postData 를 full text 로 입력 했느냐, 자바스크립트 객체로 입력 했느냐 입니다.

어떻게 보면 두가지 모두 비슷한 결과를 나타내는것 같지만
전달되는 요청관계를 자세히 살펴보면 전혀 다른 결과가 나타납니다.

안좋은예의 요청 파라미터
param1=param1&param2=param2

좋은예의 요청 파라미터

param1=param1&param2=param2&_search=false&nd=1353343119211&rows=10&page=1



두가지의 차이를 아시겠나요?
안좋은예는 정말 postData 안에 있는 항목만 파라미터로 담겨서 넘어갑니다. jqGrid 의 다른 속성 컬럼들이 파라미터에 담기질 않습니다.
(이유는 잘 모르겠습니다. 아는사람 설명 좀 부탁해요.)
그래서 당연히 페이징이랑 검색이 자연스럽게 넘어가지 않았던 거죠~!

그렇지만 자바스크립트 객체로 입력해 놓은 좋은예는 postData 뿐만아니라 jqGrid 의 다른 여러가지 프로퍼티들도 함께 넘어갑니다 ( 페이징처리 시에 필요한 rows 와 page 까지 함께..)

그렇기 때문에 첫번째 페이지가 나오는건 같은데 페이징 처리가 먹히지 않는 것은 postData 처리를 잘못 하였기 때문입니다.

postData 는 반드시 full TEXT 가 아닌 자바스크립트 객체 형식으로 넘기셔야 하고, 검색이나 페이징 시에도 마찬가지 입니다.

reload 의 나쁜예

$("#"+gridId).setGridParam({

page : pageNum,

rowNum : rowNum,

postData : "param1="+$("#param1").val()+"&param2="+$("#param2").val()

}).trigger("reloadGrid");



reload 의 좋은예

$("#"+gridId).setGridParam({

page : pageNum,

rowNum : rowNum,

postData : {

param1:$("#param1").val(),

param2:$("#param2").val()

}

}).trigger("reloadGrid");


-끝


Posted by 1010