jqgrid не может загрузить определенную страницу во время перезагрузки данных со стороны сервера

Я использую jqgrid 3.8.2, я пытаюсь использовать приведенный ниже код для перезагрузки данных со стороны сервера и отображения определенной страницы, например текущей страницы. $("#mygrid").setGridParam({datatype:json}).trigger("reloadGrid",[{page:5}]); grid может правильно загружать данные с сервера, но всегда показывает первую страницу вместо страницы 5. кто-нибудь может мне помочь?

С уважением Саймон


person YunFeng    schedule 05.07.2011    source источник
comment
Можете ли вы показать нам свой серверный код? В любом случае, для перезагрузки jqGrid этого достаточно: $(#mygrid).trigger('reloadGrid',[{page:5}]);   -  person LeftyX    schedule 05.07.2011


Ответы (1)


Я предполагаю, что вы используете параметр loadonce: true. Чтобы перезагрузить данные с сервера, вы устанавливаете datatype: в «json» (надеюсь, вы используете setGridParam({datatype:'json'}), а не setGridParam({datatype:json}), как в фрагменте кода из вопроса). После загрузки данных с сервера будет отображена первая страница локальных данных.

Чтобы решить эту проблему, вам придется еще раз перезагрузить сетку внутри loadComplete, но теперь вы должны перезагрузить локальную сетку. Чтобы не было цикла перезагрузки и чтобы разрешить локальную подкачку, вы должны проверить, является ли текущий datatype 'json':

var myGrid = $("#mygrid"), currentPage = 1;
...
myGrid.jqGrid({
    // all grid parameters and additionally the following
    loadComplete: function() {
        if (this.p.datatype === 'json' && currentPage !== 1) {
            setTimeout(function() {
                myGrid.trigger("reloadGrid",[{page:currentPage}]);
            }, 50);
        }
    }
});
....
currentPage = 5;
myGrid.setGridParam({datatype:'json'}).trigger("reloadGrid",[{page:currentPage}]);

См. демонстрацию здесь.

person Oleg    schedule 05.07.2011
comment
Я тоже пытаюсь заставить это работать, но я не использую loadonce. Я пытаюсь установить текущую страницу, когда пользователь впервые заходит на страницу. На моем сервере текущая страница - страница - всегда одна, какой бы параметр сетки я не устанавливал как в loadComplete. - person Cody; 05.01.2015
comment
@DoctorOreo: Вы пытались просто использовать параметр page: 2 (любое значение, отличное от значения по умолчанию page:1) jqGrid? Вы должны убедиться, что jqGrid отправит page=2 в качестве параметра на сервер. Если это не решит проблему, вы должны открыть новый вопрос, включить больше кода и описание проблемы. - person Oleg; 05.01.2015
comment
@Oleg: я отправил новый вопрос, поскольку я получил его частично работает, но не так, как я надеялся. - person Cody; 06.01.2015
comment
@Oleg: Отличный ответ, но, пожалуйста, не могли бы вы сказать мне, вызывал ли я запрос ajax, который возвращает мне данные json. В настоящее время, как я могу заполнить свою jqgrid этими данными? Я имею в виду, какую функцию я должен использовать после вызова этого запроса для заполнения jqgrid. Спасибо. - person Jad Chahine; 11.04.2016
comment
@JadChahine: это очень старый ответ. Теперь есть лучшие возможности. Ответ на ваш вопрос: Сетка имеет параметр url. Использование .trigger("reloadGrid", {fromServer: true, page:currentPage}); перезагрузит сетку с новой датой от url вместо перезагрузки сетки с возможно измененным локально data параметром jqGrid (в случае использования без опции fromServer: true бесплатный jqGrid). Кроме того, опция forceClientSorting: true позволяет удалить весь код loadComplete, описанный в ответе. - person Oleg; 11.04.2016
comment
@JadChahine: см. ОБНОВЛЕНО часть ответа и этот о forceClientSorting: true и ответ и этот о fromServer: true - person Oleg; 11.04.2016
comment
@Олег: спасибо за ответ, еще один вопрос, пожалуйста. Могу ли я создать кнопку с той же функциональностью, что и кнопка далее или назад в jqgrid? - person Jad Chahine; 18.04.2016
comment
@JadChahine: Почему бы и нет? Текущий номер страницы можно получить с помощью .jqGrid("getGridParam", "page"), увеличить или уменьшить его и вызвать reloadGrid с дополнительным параметром {page: newPageValue}. - person Oleg; 18.04.2016
comment
@Oleg: Спасибо, я использую var nextPg = $("#myGridId").getGridParam("page") + 1;, чтобы получить номер следующей страницы, затем перезагружаю сетку, используя $("#myGridId").trigger("reloadGrid",[{page:nextPg}]);, но jqgrid не перезагружается. - person Jad Chahine; 18.04.2016
comment
@JadChahine: Вы получаете страницу из одной сетки $("#propertiesGrid"), но перезагружаете другую $("#mygridId")? Я пытался использовать var nextPg = $grid.jqGrid("getGridParam", "page") + 1; $grid.trigger("reloadGrid", [{page:nextPg}]);, и у меня это работает, как и ожидалось. Вероятно, вам следует опубликовать новый вопрос с подробным описанием и URL-адресом, который можно использовать для отладки вашего кода. - person Oleg; 18.04.2016
comment
Нет, конечно, я указал тот же идентификатор сетки, здесь была проблема с набором текста. Это все еще не работает. - person Jad Chahine; 18.04.2016
comment
@JadChahine: я могу повторить, что это работает в моих тестах. Таким образом, если вы хотите, чтобы я помог вам, вы должны опубликовать демонстрацию, которая воспроизводит проблему, о которой вы сообщаете. Возможно, вы используете код в неправильном контексте (где именно вы используете фрагмент кода). Я не могу угадать, что ты делаешь. - person Oleg; 18.04.2016