У меня возникла небольшая проблема с этим фантастическим плагином jqgrid и моей попыткой использовать его со службами данных WCF (не совсем, но очень похожими службами odata4j). Кстати, если кто-то думает об использовании jqgrid со службами odata, пришлите мне строку, я нашел ответы на сложные вопросы, такие как, например, как настроить xmlreader сетки для чтения структуры xml odata, преодолев проблему поиска пространства имен jquery. (подсказки:
включить jquery.xmlns.js
.....
$.xmlns.m = "http://schemas.microsoft.com/ado/2007/08/dataservices/metadata";
$.xmlns.d = "http://schemas.microsoft.com/ado/2007/08/dataservices";
.....
var feedXmlReaderOptions = {
root: "feed",
row: "entry",
repeatitems: false,
id: "feed>entry>id"
};
....
colModel: [
{
name: "clmNumKey",
index: "clmNumKey",
width: 150,
xmlmap: "d|clmNum",
editable: true
}
....
)
В любом случае, проблема заключается в том, что службам odata требуется метод, который обращается к операции редактирования (DELETE, PUT, MERGE) для отправки в виде пользовательского заголовка запроса при обычном POST, а не в качестве метода http. Причина этого, по-видимому, в том, что большинство брандмауэров не пропускают http-методы PUT и DELETE, потому что именно так вы можете, например, размещать новые файлы на сервере, а также удалять файлы, если вы можете угадать действительный путь. Короче говоря... событие loadBeforeSend не запускается для встроенного редактирования или редактирования формы... Я вижу, что оно запускается при полном запросе данных сетки, но я получаю событие serializeEditData
только при отправке из формы редактирования . Я беспокоюсь, потому что я зашел в исходные файлы jqgrid (grid.formedit.js
, grid.inlineedit.js
) и не смог получить никаких совпадений с ключевыми словами перед отправкой, там отображаются только данные serializeeditdata. Я что-то упускаю? Есть ли другой способ установить нужные мне заголовки для объекта xhr
ajax, который использует сетка? Этот объект xhr
выставлен напоказ сеткой?
Ниже у вас есть код, который я должен обрабатывать события редактирования... опять же, loadBeforeSend не запускается...
Заранее спасибо Сербан
$.extend($.jgrid.edit, {
closeAfterEdit: true,
closeAfterAdd: true,
ajaxEditOptions: {
contentType: "application/json"
},
mtype: 'POST',
loadBeforeSend: function(xhr)
{
xhr.setRequestHeader("X-HTTP-Method", "MERGE");
return xhr;
},
serializeEditData: function (data) {
delete data.oper;
return JSON.stringify(data);
}
});