Вы правы, что errorTextFormat является правильным способом получения ответа сервера в случае ошибок HTTP и отображения соответствующего сообщения об ошибке.
Прежде всего ваш сервер должен вернуть ответ с код ошибки HTTP в заголовке HTTP.Затем вы должны определить свою реализацию дескриптора события errorTextFormat либо как часть prmEdit
, prmAdd
, prmDel
параметров navGrid , либо вы можете перезаписать настройки jqGrid по умолчанию(см. здесь ).Лично я предпочитаю установить errorTextFormat , изменив jQuery.jgrid.edit
и jQuery.jgrid.del
.Пример соответствующего кода вы можете найти в следующем старом ответе .
Точный код функции errorTextFormat должен зависеть от формата сервераответ .Я использую ASP.NET MVC с WFC внутри сайта, и сервер может возвращать либо строковый ответ в кодировке JSON (если ошибка произошла от throw new WebFaultException<string> ("my error text", statusCode);
, которую я явным образом выдал), либо иногда HTML-ответ.В моей реализации errorTextFormat я проверяю, какой ответ об ошибке я получил, и конвертирую ответ сервера.Вот фрагмент кода:
my.errorTextFormat = function (data) {
var str = data.responseText.substr(0, 1);
var str1 = data.responseText.substr(0, 6).toLowerCase();
if (str === '"') {
var errorDetail = jQuery.parseJSON(data.responseText);
var s = "Fehler: '";
s += data.statusText;
s += "'. Details: ";
s += errorDetail;
return s;
}
else if (str1 === "<html " || str1 == "<html>" ||
data.responseText.substr(0, 169) === '<?xml version="1.0" encoding="utf-8"?>\r\n<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r\n<html ') {
var bodyHtml = /<body.*?>([\s\S]*)<\/body>/.exec(data.responseText)[1];
return bodyHtml; //bodyContents1;
}
else {
var res = "Status: '";
res += data.statusText;
res += "'. Felhercode: ";
res += data.status;
return res;
}
};
jQuery.extend(jQuery.jgrid.edit, {
...
errorTextFormat: my.errorTextFormat
});
jQuery.extend(jQuery.jgrid.del, {
...
errorTextFormat: Testportal.errorTextFormat
});
Код не идеален, но вы можете использовать его для создания собственного.