Я думаю, что есть недоразумение по поводу использования Ajax и загрузки сетки с сервера.Ajax использует внутренний протокол HTTP, который разделяет clear успешно отвечает из-за ответа error .Если сервер обнаружит какую-либо ошибку, он должен установить статус ошибки HTTP (см. здесь или здесь ).В случае кода состояния HTTP 400 и выше будет вызываться обратный вызов loadError
вместо loadComplete
.Формат ответа об ошибке может быть совершенно другим, как формат успешного ответа.
Поэтому я не вижу причин, по которым все блоки SUCCESS
, DATA
и ERRORS
имеют.Логическое значение SUCCESS
будет ясно из контекста: оно равно false
внутри loadError
и true
внутри loadComplete
.RESPONSE.DATA
может быть непосредственно телом ответа.и RESPONSE.ERRORS
может быть телом ответа об ошибке.
Это причина, по которой существуют и обратные вызовы loadError
и loadComplete
.
beforeProcessing
будет вызываться только вслучай успешного ответа.Оператор console.log(data);
не будет отображать необходимую информацию, потому что data
будет объектом, а текст, такой как LOG: [object Object] beforeProcessing was called
, который будет создан с помощью console.log(data + ' beforeProcessing was called');
, получит немного информации.
ОБНОВЛЕНО: я не знаю ColdFusion, и это ограничение в обработке ошибок.Если вы действительно можете только в случае успеха вернуть данные типа
{
"SUCCESS": true,
"ERRORS": [],
"DATA": {
"TOTAL": xxx,
"PAGE": "yyy",
"RECORDS": "zzz",
"ROWS": [
{"ID": "id1", "CELL": ["cell11", "cell12", "cell13"]},
{"ID": "id2", "CELL": ["cell21", "cell22", "cell23"]},
...
]
}
}
и в случае ошибки
{
"SUCCESS": true,
"ERRORS": ["Any error description"],
"DATA": {
}
}
, тогда вы можете сделать следующее.
Прежде всего вы должны определить jsonReader опцию jqGrid, которая соответствует успешным данным:
jsonReader: {
root: "DATA.ROWS",
page: "DATA.PAGE",
total: "DATA.TOTAL",
records: "DATA.RECORDS",
id: "ID"
}
Чтобы иметь возможность прочитать ответ об ошибке, вы можете поместить пустую часть "DATA"
вответ внутри beforeProcessing
:
beforeProcessing: function (data) {
if (!data.SUCCESS) {
// error response. we set empty "DATA"
data.DATA = {TOTAL: 0, PAGE: 0, ROWS: []};
// now the data.ERRORS should be processed
alert (data.ERRORS.join(','));
}
}
В реальном мире вы должны отображать сообщения об ошибках от data.ERRORS
в некотором div или диалоге вместо использования alert
, но общая схема, описанная выше, должнаработа.