Получить пользовательские данные JSON JQGrid в методе gridComplete - PullRequest
0 голосов
/ 01 сентября 2011

Вот типичный JSON-ответ JQGrid:

{
  "page":1,
  "records":537,
  "rows":[..],
  "rowCount":10,
  "total":54
}

Наряду с этим я хочу отправить дополнительные пользовательские данные. Например, я хотел бы отправить время базы данных последнего поиска, чтобы я мог лениво перезагрузить свою сетку всякий раз, когда с тех пор произошли изменения. Вот как я хотел бы отправить эти данные:

{
  //Custom name-value pairs:
  "nameValues":{"lastSearchTime":"2011/09/01:14:14:56"},

  //Normal JSON data:
  "page":1,
  "records":537,
  "rows":[..],
  "rowCount":10,
  "total":54
}

Проблема в том, что JQGrid поглощает ответ JSON, а не перенаправляет его в метод gridComplete. Другими словами, params не определен в следующей функции:

function myGridComplete (params){
   //params is undefined!

   var JSONResponse = ?;//I need your help here!!!

   globalGridVariables.lastSearchTime = JSONResponse.nameValues.lastSearchTime;

   //Rest of grid complete method
   ..
}

Пожалуйста, дайте мне знать, если есть способ получить доступ к объекту ответа JSON в методе gridComplete или есть другой поддерживаемый способ добавить пользовательские данные в ответ JSON.

Большое спасибо!

Примечание: Я не хочу отправлять это как скрытый столбец, потому что это было бы неэффективно.

Ответы [ 2 ]

4 голосов
/ 01 сентября 2011

Вы можете использовать loadComplete вместо gridComplete. Событие loadComplete имеет один параметр (например, data), который представляет полные данные из ответа сервера, включая все ваши расширения.

В качестве альтернативы вы можете переименовать nameValues в userdata и использовать $('#list').jqGrid('getGridParam', 'userData') для получения значения. См. здесь для получения дополнительной информации.

Кроме того, вы можете использовать больше HTTP-кэширование (см. здесь и здесь ) для целей, которые вы описали в своем вопросе.

1 голос
/ 09 октября 2013

Вы можете использовать beforeProcessing , который имеет десериализованный ответ и становится активным до gridComplete и loadComplete.

Например:

beforeProcessing: function (data, status, xhr) {
                            myArray = data.rows;
                        }

И просто сделать его болееиз документации:

Ниже приведен порядок выполнения событий при выполнении запроса ajax

  1. beforeRequest
  2. loadBeforeSend
  3. serializeGridData
  4. loadError
  5. перед обработкой
  6. gridComplete
  7. loadComplete
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...