2013-06-23 2 views
1

Я использую jqGrid, но из-за моей технологии на стороне сервера я не могу вызывать URL-адрес напрямую, чтобы получить данные, и может отправлять сообщения только на сервер через сторонний брокер. Моя цель - загрузить данные в Grid, вызвав мою собственную функцию JavaScript, которая вызывает сервер и возвращает строку JSON.jqGrid reload datatype: local для каждого запроса

То, что я пробовал: вместо

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'); 

Я попробовал то, что Олег предложил here и here, но он все еще не кажется, называет свою функцию инициализации снова.

ответ

1

Вы текущий код вызывает init()разперед тем создания сетки. Затем он создает сетку, используя результат, возвращаемый с init().

Если вам действительно нужно использовать datatype: 'jsonstring' (и не datatype: "local" с дополнительным параметром data), то вы можете сбросить значение datastr параметра перед вызовом reloadGrid. Соответствующий код может быть примерно следующим:

$("#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() 'выполняется синхронно, вы можете просто использовать' setGridParam' внутри 'beforeRequest' ** без ** использования' reloadGrid'. – Oleg

+0

Отлично работает, я могу получить данные в Grid. Однако пейджинг не меняет, он всегда говорит 1 из 1 страницы, и нет кнопки следующей страницы, хотя у меня есть 3 страницы. моя страница размер = 10. Мой JSON является ' "всего": "3", "страница": "1", "записи": "31",' В следующий раз я нахожусь в Германии, я должен тебе пиво – Daveo