Событие loadComplete запускается при каждой операции фильтрации в jqGrid?

#jqgrid #event-handling

#jqgrid #обработка событий

Вопрос:

Согласно wiki-странице jqGrid, «Это событие выполняется сразу после каждого запроса сервера».

В моей сетке у меня есть панель инструментов фильтра сверху.

 $(table_data_obj).jqGrid('filterToolbar', {stringResult:true, searchOnEnter:true, autosearch:true, defaultSearch:'cn'}); 
  

и функция loadComplete, подобная:

 loadComplete: function(data) {
 data_processing(data);
}
  

Всякий раз, когда я фильтрую данные сетки локально (без нового запроса сервера), вызывается data_processing (данные). И я не хочу такого поведения. Как я могу убедиться, что data_processing (данные) вызывается только при новых запросах сервера.

Редактировать Я хочу выполнить некоторую обработку данных, каждый раз, когда новые данные извлекаются с сервера. Есть ли лучшее место для этого?

Комментарии:

1. мое взломанное решение: проверка данных.строки [0].ячейка внутри data_processing (данные). Объект Cell присутствует только в данных ответа сервера.

Ответ №1:

Вы не опубликовали определение jqGrid и не описываете, почему у вас иногда есть данные с сервера, а иногда локально. Я полагаю, что вы используете loadonce:true опцию и когда-нибудь сбрасываете datatype параметр jqGrid на исходное значение ‘json’ или ‘xml’, если вам нужно перезагрузить данные с сервера. Если это ваш случай, я бы рекомендовал вам проверить, является ли datatype параметр «локальным» или нет. Вы можете использовать либо if like if ($("#list").jqGrid('getGridParam','datatype') !== 'json') {/* local data */} , либо использовать просто $("#list")[0].p.datatype вместо $("#list").jqGrid('getGridParam','datatype') . Если данные загружаются с сервера, то datatype они будут ‘json’ (или ‘xml’). После обработки loadComplete события datatype значение будет изменено на ‘local’, если вы используете loadonce:true опцию.

Ответ №2:

используйте firebug для просмотра запроса к серверу. проверьте параметры, вы получите представление о том, какие значения публикуются. используйте оповещения в событиях, чтобы определить конкретное событие, вызывающее запрос сервера

Комментарии:

1. новых запросов к серверу нет, как уже упоминалось в вопросе. это просто событие, которое запускается при фильтрации данных.

2. ваша функция data_processing() будет вызываться при loadcomplete () в конечном итоге для каждого фильтра. gridcomplete () можно использовать, если у вас есть все данные. сначала вы говорите «нет» запросу сервера, затем вы говорите «да» запросу сервера (проверьте вашу правку)

3. Я хочу, чтобы data_processing() вызывалась при каждом новом запросе сервера, а не при фильтрации данных. И gridcomplete также вызывается при фильтрации.

4. получите данные через функцию $.ajax, сохраните эти данные в некотором массиве в формате json и обработайте эти данные с помощью функции loadcomplete(), ваш массив будет доступен в событии loadcomplete. кроме того, когда данные извлекаются, вы можете использовать clientAray. прочитайте trirand, как использовать clientArray.