#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.