Как загрузить jqGrid для загрузки на сервер?

Мы используем кнопку перезагрузки навигатора jqGrid на сетке с loadonce, установленным в true.

Кнопка перезагрузки в настоящее время НЕ возвращается на сервер для получения данных - как мы можем получить перезагрузку, чтобы перейти на сервер, чтобы получить последние данные?

Я считаю, что мы можем использовать обратный вызов beforeRefresh, чтобы установить сетку data в json вместо local, но я "Непонятно, как даже настроить метод beforeRefresh - я действительно не понимаю документы.

Ответ 1

Вы не единственный человек, у которого есть проблема. Ранее я отвечал на тот же вопрос. Чтобы перезагрузить содержимое сетки с сервера, вы должны reset параметр datatype установить исходное значение "json" или "xml", а затем обновить сетку. Например

jQuery("#list").jqGrid('setGridParam',{datatype:'json'}).trigger('reloadGrid');

ОБНОВЛЕНО. Чтобы вызвать строку внутри beforeRefresh обработчик событий, вы можете выполнить следующие

jQuery("#list").jqGrid('navGrid','#pager',
  { edit:false,view:false,add:false,del:false,search:false,
    beforeRefresh: function(){
        alert('In beforeRefresh');
        grid.jqGrid('setGridParam',{datatype:'json'}).trigger('reloadGrid');
    }
  });

Я изменил пример из старого вопроса. Здесь, если вы нажмете кнопку обновления, вы можете видеть вживую, как работает код.

ОБНОВЛЕНО 2: Бесплатный jqGrid поддерживает некоторые новые параметры. reloadGrid поддерживает fromServer: true параметр, который может использоваться для принудительной перезагрузки данных с сервера, а navGrid поддерживает параметр reloadGridOptions, который может использоваться для указания опций reloadGrid, используемых при нажатии кнопки "Обновить". Таким образом, приведенный выше код может быть

$("#list").jqGrid("navGrid", {
    edit: false,
    add: false,
    del: false,
    search: false,
    reloadGridOptions: { fromServer: true }
});

Кстати, можно использовать опцию navOptions jqGrid для указания опций по умолчанию navGrid (см. статью wiki). Это позволяет написать код что-то вроде

$("#link").jqGrid({
    // all typical jqGrid parameters
    datatype: "json", // or "xml"
    loadonce: true,
    pager: true, // no empty div for page is required
    navOptions: {
        edit: false,
        add: false,
        del: false,
        search: false,
        reloadGridOptions: { fromServer: true }
    }
}).jqGrid("navGrid");

Ответ 2

Я пробовал следующую конфигурацию, и она работает.

<script type="text/javascript">
jQuery(function() {
    jq("#YOUR-GRID-ID").jqGrid({
        ...
        loadonce: true,
        ...
    });
    jQuery("#refresh_YOUR-GRID-ID").click(function(){
        jQuery("#YOUR-GRID-ID").setGridParam({datatype: 'json'});
        jQuery("#YOUR-GRID-ID").trigger("reloadGrid");
    });
});
</script>