О событиях процесса JqGrid

Просто хочу лучше понять JqGrid процесс события

  • beforeRequest
  • loadBeforeSend
  • serializeGridData ​​li>
  • loadError
  • gridComplete
  • loadComplete

На основании этих событий

  • Если я хочу добавить фильтр или дополнительные параметры в запросе ajax к серверу, я должен сделать это в loadBeforeSend , верно?
  • После того, как я получу данные с сервера, если я хочу, чтобы данные не отображались в сетке (сначала я хочу обработать их, а потом только отображать обработанные данные), я должен сделать это в gridComplete верно?

Поскольку моя работа требует, чтобы я добавлял дополнительные параметры при отправке запроса на сервер и после получения данных, мне нужно запретить сетке отображать данные в сетке, чтобы я мог обрабатывать данные дальше, прежде чем отобразить обработанные данные в сетке. Но я не мог понять, в какое событие JqGrid я должен поместить свою функцию.

Спасибо


EDIT:

Для части postData ​​p>

loadBeforeSend: function() {
    if (sessionStorage.pathStates == "edit" && location.pathname.indexOf("list") > -1) {
        console.log("SUCCESS");
        loadFilter();
    }
},

И loadFilter

function loadFilter() {
    var filter = JSON.parse(sessionStorage.filter);
    var filterInput = [],
        model = [],
        filters = {};
    filterInput = filter.filterInput;
    model = filter.model;
    var grid = filter.grid,
        page = filter.page,
        op = "bw",
        a = 0,
        b = 0;

    filters = {
        groupOp: "AND",
        rules: []
    };

    for (var i = 0; i < model.length; i++) {
        if (filterInput[a].length > 0) {
            filters.rules.push({
                field: model[a],
                op: "bw",
                data: filterInput[a]
            });
        }
        a++;
    }

    $(grid).jqGrid('setGridParam', {
        search: true,
        postData: {
            filters: JSON.stringify(filters)
        }
    }).trigger('reloadGrid');
}

Что касается до обработки, я до сих пор не знаю об этом. Но процесс, который я имел в виду, выглядит примерно так

beforeProcessing: function(data) {
     if (sessionStorage.pathStates == "edit" && location.pathname.indexOf("list") > -1) { >>
         Filter data based on certain criterias, like
         for example, changing one of the column format, or only displaying data that has the value of xxx on certain column >>
             Return the filtered data
     }
 },
7 голосов | спросил Fred A 23 J0000006Europe/Moscow 2014, 12:01:54

1 ответ


0

Я нахожу ваш вопрос интересным. Я согласен, что текущая документация jqGrid описывает недостаточно ясную обработку событий и обратных вызовов. Поэтому я опишу в ответе в первую очередь обработку в деталях. Я рассмотрю только тот случай удаленного datatype, который вам нужен (datatype: "json" или datatype: xml). Позже я вернусь к вашему конкретному случаю и напишу свои рекомендации для вас.

Перед вызовом beforeRequest обратного вызова jqGrid build data

  • Опция prmNames позволяет настроить имена параметров стандартных , которые будут отправляться на сервер в соответствии с Ajax. Та же опция prmNames позволяет удалить некоторые параметры, установив соответствующее значение в null.
  • Опция postData позволяет расширять параметры, которые будут отправлены на сервер. Значение параметра postData будет использоваться в $.extend (см. здесь ) объединить дополнительные параметры со стандартными параметрами. jqGrid использует результирующий параметр postData в качестве значения data
  • Событие jQuery "jqGridBeforeRequest" будет запущено. Можно вернуть "stop" строку false логическое значение значение, чтобы остановить последующую обработку запросов к серверу. Можно изменить параметр postData внутри дескриптора события "jqGridBeforeRequest".
  • callback beforeRequest работает точно так же, как событие jQuery "jqGridBeforeRequest", но для каждой сетки можно определить только один обратный вызов. Обратный вызов может вернуть false, чтобы остановить запрос. Можно использовать this для доступа к параметрам сетки (см. ответ ).
  • Необязательный обратный вызов serializeGridData является прошлой возможностью управления информацией, которая будет отправлена ​​на сервер. Если обратный вызов serializeGridData определен, он должен возвращать либо строку, которая будет отправлена ​​на сервер, либо объект со свойствами или функциями. Возвращенный объект будет использоваться в качестве значения параметра data для jQuery.ajax .
  • во время обработки Ajax-запроса jQuery может вызывать дополнительные функции, определенные в postData. Кроме того, jQuery будет вызывать loadBeforeSend. Например, можно использовать обратный вызов loadBeforeSend для изменения /расширения заголовков HTTP запроса Ajax. См. ответ и приведите пример кода. Можно вернуть false из loadBeforeSend для принудительного применения остановка запроса Ajax.

Теперь jQuery,ajax немного подождите ответа от сервера. При необходимости можно изменить значения тайм-аута по умолчанию. См. ответ .

Если ответ получен от сервера, и ответ содержит успешный код состояния HTTP (значение меньше чем 400) тогда jqGridинтерпретировать ответ как успешный и обработать его одним способом. Неудачные ответы будут обработаны другим способом.

Существует важный обратный вызов beforeProcessing, который позволяет предварительно обработать ответ сервера перед это будет обработано jqGrid. Можно изменить или расширить данные, возвращаемые с сервера. См. ответ , например. Кроме того, jqGrid позволяет нарушить стандартную обработку ответа сервера обратным вызовом beforeProcessing. Если обратный вызов возвращает false, тогда jqGrid прервет обработку и просто проигнорирует ответ сервера.

Затем jqGrid обрабатывает ответ сервера. Он будет интерпретироваться как JSON или XML ответ на основе параметра datatype в jqGrid. Во время обработки данных некоторые другие функции обратного вызова, определенные внутри jsonReader или xmlReader (см. здесь ) или определено в jsonmap /xmlmap ( смотрите здесь и здесь примеры) можно назвать.

После обработки видимой страницы данных будет вызвано событие jqGridGridComplete, gridComplete, после чего будет запущен jqGridAfterGridComplete.

После обработки всего ответа сервера (особенно важно, если вы используете опцию loadonce: true), тогда jqGridLoadComplete будет вызвано событие, будет вызван обратный вызов loadComplete и jqGridAfterLoadComplete событие будет инициировано.

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

С другой стороны, если ответ сервера не удался из-за тайм-аута или из-за того, что ответ содержит ошибочный код состояния HTTP, никакие вызовы обратного вызова не будут вызываться. Вместо этого вызывается только обратный вызов loadError. Ответ подробно обсуждает обратный вызов. Я настоятельно рекомендую определить обратный вызов loadError во всем вашем производительном коде, который использует jqGrid. На сервере должно появиться сообщение об ошибке.

Теперь я вернусь к вашему конкретному делу.

Я бы порекомендовал вам использовать postData для добавления дополнительных параметров при отправке запроса. Все статические параметры вы можете напрямую определить как свойства. Все динамические параметры вы можете определить как функции.

Кроме того, я бы рекомендовал вам использовать обратный вызов beforeProcessing. Это позволяет, например, остановить отображение данных в сетке. Вы можете читать и анализировать данные, возвращаемые с сервера. Можно легко изменить данные (например, удалить некоторые поля).

ответил Oleg 23 J0000006Europe/Moscow 2014, 14:34:38

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132