2012-12-10 6 views
3

저는 jqGrid에 초보자이며 Ajax 호출을 통해 서블릿에서 데이터를 채우고 jqGrid에 표시합니다. 이것은 아무 문제없이 잘 작동합니다. 하지만, 필자가 열 이름으로 날짜를 표시하고 있기 때문에 필자의 경우에는 열 이름이 동적입니다.다른 비동기 서버 호출을 피하십시오.

따라서 jqGRid에 대해 동적 인 colModel을 검색 할 때 아래 코드를 발견했습니다.

하지만 두 개의 Ajax 호출이 발생합니다. 누구든지 동적 열 머리글을 사용 했습니까?

<script type="text/javascript"> 

    var grid = $("#rowsList"); 
    var url = '/getRowList?Id=9371&fromDate=2011-12-06&toDate=2012-12-06'; 
    jQuery().ready(function(){ 
     $.ajax({ 
      url: url, 
      dataType: 'json', 
      success: function(response) { 
       prepareGrid(response); 
      }, 
      error: function(request, textStatus, errorThrown) { 
       alert(textStatus + " : " + request.responseText); 
      } 
     }); 
    }); 

    function prepareGrid(response){ 
     if (response) { 
      if (!response.Error) { 
       var colData = getColumnsData(response.columnData); 
       colData = eval('{' + colData + '}'); 

       grid.jqGrid({ // This makes second server call 
        url: url, 
        datatype: 'json', 
        mtype: 'POST', 
        colModel: colData, 
        colNames: response.columnData, 
        height : 'auto', 
        pager: '#pager', 
        viewrecords: true, 
        loadtext: 'Loading', 
        sortorder: "asc", 
        gridview: true, 
        altRows: true, 
        cellEdit: false, 
        caption: 'Data List' 
       }); 
      } 
     } 
    } 

    /** 
    * Creates column data for jqgrid 
    */ 
    function getColumnsData(Data) { 
     // return column data array in jqGrid compatible format 
     // This works fine 
    } 

</script> 

내 다른 선택의 여지가 첫 번째 호출에만 열 이름을 반환하고 colModels을 설정하지만이 단일 서버 호출 할 수 있으면 좋을 것입니다.

답변

2

Ajax 호출 수가 줄어들 었음을 경고하고 싶습니다. 당신이있는 jqGrid에 초보자 인 경우가있는 jqGrid의 사용에 몇 가지 일반적인 것을 이해하는 것이 중요합니다 :

  • 있는 jqGrid가 grid.jqGrid({...});의 통화 중 번 를 초기화 할 필요가있다.
  • url by jqGrid가 사용됩니다.

그리드 호출기의 일반적인 사용자 인터페이스 요소가 사용자에 의해 사용될 수

enter image description here

enter image description here

가있는 jqGrid와 상호 작용 (the answer 참조). 그래서 사용자가 "다음 페이지"버튼을 클릭하면 표시되는 행의 수를 변경하거나 정렬 열 (또는 정렬 방향)을 서버로 변경하면 url으로 전송됩니다. 이 검색 툴과 같은 사용자 인터페이스의 다른 요소를 사용하는 것은 매우 실용적이다 : 또한 변형 파라미터를 url 새로운 요청을 생성

enter image description here

. 서버 응답 을 받으면 그리드 본문 만이으로 바뀝니다. 그리드의 다른 부분은 변경되지 않습니다. GridUnload 메서드를 사용하여 전체 표를 다시 만들 수 있습니다 (here 예제 참조).

그리드의 데이터와 함께 매번 열 정의를 전송하면 불필요한 데이터가 전송되므로 성능이 저하 될 수 있습니다. 네가 원해.

+0

사용자가 다음 페이지를 클릭하면 새로운 열 이름이 필요합니다. 그래서, 가능할까요? –

+0

@HardikMishra : 거의 모든 것이 가능하지만 어떤 경우에는 그런 이상한 행동을 구현해야 할 수도 있습니다. 그럼에도 불구하고 [onPaging] (http://www.trirand.com/jqgridwiki/doku.php?id=wiki:pager#events) 콜백을 구현하여 'GridUnload'를 호출하고 새로운 옵션으로 그리드를 다시 생성 할 수 있습니다. – Oleg

+0

답변 해 주시고 의견을 공유해 주셔서 감사합니다. 나는 GridUnload를 선택하고 새로운 옵션으로 그리드를 생성했다. –

관련 문제