2012-12-10 48 views
3

我是新手到jqGrid,並通過Ajax調用和顯示在jqGrid從Servlet填充數據。這工作正常沒有問題。但是,在我的情況下,列名是動態的,因爲我將日期顯示爲列名。避免另一個異步服務器調用jqGrid

因此,當搜索Dynamic colModel for jqGRid時,我發現下面的代碼。

但是,這會導致兩個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將被使用多次由jqGrid。

網格有在尋呼機一些共同的用戶界面元素(見the answer

enter image description here

enter image description here

可以由用戶來使用的jqGrid進行交互。因此,如果用戶點擊「下一頁」按鈕,更改顯示的行數或更改排序列(或排序方向)的新請求到服務器,到url將被髮送。這是非常實用的使用的用戶界面的其它元件如搜索工具:

enter image description here

這也產生具有修改後的參數來url新請求。在收到服務器響應後,只有網格體將被替換爲。網格的其他部分將保持不變。您可以使用GridUnload方法來重建整個電網(見here例子)

所以,如果你將與電網的數據,每次一起傳送列定義,你會發送不需要的數據,這樣可以減少,而不是改善其性能你要。

+0

當用戶點擊下一頁時,我需要新的列名。那麼,這可能嗎? –

+0

@HardikMishra:幾乎所有事情都是可能的,但我不明白在這種情況下可能需要實施這種奇怪的行爲。不過,您可以實現[onPaging](http://www.trirand.com/jqgridwiki/doku.php?id=wiki:pager#events)回調,您可以調用'GridUnload'並使用新選項重新創建網格。 – Oleg

+0

感謝您回答並分享您的觀點。我選擇了'GridUnload'並使用新選項創建網格。 –