Я использую 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, но он все еще не кажется, называет свою функцию инициализации снова.
спасибо, что похоже работа. Однако я не уверен, где разместить этот код. Я попытался поместить его в функцию beforeRequest (http://www.trirand.com/jqgridwiki/doku.php?id=wiki:events), но он заканчивается бесконечным циклом – Daveo
@Daveo: Вы не разместили, где вы использовали '$ (" # list "). setGridParam ({datatype: 'jsonstring', page: 1}). trigger ('reloadGrid');' before. Поэтому трудно ответить, где его следует разместить сейчас. Если функция init() 'выполняется синхронно, вы можете просто использовать' setGridParam' внутри 'beforeRequest' ** без ** использования' reloadGrid'. – Oleg
Отлично работает, я могу получить данные в Grid. Однако пейджинг не меняет, он всегда говорит 1 из 1 страницы, и нет кнопки следующей страницы, хотя у меня есть 3 страницы. моя страница размер = 10. Мой JSON является ' "всего": "3", "страница": "1", "записи": "31",' В следующий раз я нахожусь в Германии, я должен тебе пиво – Daveo