2013-06-23 101 views
1

我使用jqGrid,但由於我的服務器端技術,我不能直接調用URL來獲取數據,只能通過第三方代理髮布到服務器。我的目標是能夠通過調用我自己的調用服務器的JavaScript函數並返回JSON字符串來將數據加載到Grid中。jqGrid重新加載數據類型:本地爲每個請求

我試了一下:不是

url:'http://127.0.0.1/products/index.php’, 
datatype: 'json', 

datastring:init(), 
datatype: 'jsonstring', 

init()功能確實在服務器端調用。它適用於初始頁面加載。然而,它不會再被調用,例如當我在頁面之間跳轉時,或更改要查看的行數時。我需要它調用我的init函數來刷新數據庫中的數據。但它不會多次呼叫我的init()函數。我認爲它認爲這是一個永不改變的硬編碼字符串。

我試着手動撥打$("#mygrid").trigger("reloadGrid");,但它似乎也不起作用。

我網格是:

<script type="text/javascript"> 
$(function(){ 
    $("#list").jqGrid({ 
    datastr:init(), 
    datatype: 'jsonstring', 
    mtype: 'GET', 
    beforeRequest: beforeReq, 
    pager: '#pager', 
    rowNum:5, 
    rowList:[5,10,30], 
    sortname: 'invid', 
    sortorder: 'desc', 
    grouping:true, 
    viewrecords: true, 
    gridview: true, 

    }); 
}); 
</script> 

我打過電話

$("#list").setGridParam({datatype:'jsonstring', page:1}).trigger('reloadGrid'); 

我試了一下奧列格曾建議herehere但它仍然似乎並沒有再打電話給我的初始化函數。

回答

1

您當前的代碼調用之前init()一次創建網格。然後使用從init()返回的結果創建網格。

如果你真的需要使用datatype: 'jsonstring'(而不是datatype: "local"額外data參數),那麼你可以在調用reloadGriddatastr參數的值復位。相應的代碼可能如下:

$("#list").setGridParam({ 
    datatype: "jsonstring", 
    datastr: init() 
}).trigger("reloadGrid", [{page: 1}]); 
+0

感謝,似乎工作。不過,我不知道該把代碼放在哪裏。我試圖把它放在beforeRequest函數中(http://www.trirand.com/jqgridwiki/doku.php?id=wiki:events),但它以無限循環結束 – Daveo

+0

@Daveo:你不會在你使用過的地方'$(「#list」)。setGridParam({datatype:'jsonstring',page:1})。trigger('reloadGrid');'before。所以很難回答一個人應該把它放在哪裏。如果'init()'函數同步運行,那麼只需在'beforeRequest' **內使用'setGridParam'而不使用'reloadGrid'。 – Oleg

+0

非常好,似乎工作我可以在網格中獲取數據。然而,分頁不會改變,它總是說1頁中的1頁,即使我有3頁,也沒有下一頁按鈕。 我的頁面大小= 10。 我的JSON是 ' 「總」: 「3」, 「頁」: 「1」, 「記錄」: 「31」,' 下一次,我在德國我欠你一個啤酒 – Daveo