JQGrid с сервисами данных WCF (OData); loadBeforeSend не вызывается в режиме редактирования; Не могу сделать setRequestHeader
У меня небольшая проблема с этим фантастическим плагином jqgrid, и я пытаюсь использовать его с WCF Data Services (не совсем, но с очень похожими сервисами odata4j). Кстати, если кто-то думает об использовании jqgrid со службами odata, пришлите мне строку, я нашел ответы на сложные вопросы, такие как, например, как настроить grid xmlreader для чтения структуры XML odata, побеждающей проблему поиска в пространстве имен jquery ( Рекомендации:
включаютjquery.xmlns.js
<code>..... $.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 } .... ) </code>
В любом случае, проблема заключается в том, что сервисам odata нужен метод, который обращается к операции редактирования (DELETE, PUT, MERGE), чтобы он отправлялся как пользовательский заголовок запроса на обычном POST, а не как метод http. Причина этого заключается в том, что большинство брандмауэров не разрешают проходить HTTP-методы PUT и DELETE, потому что именно так вы можете, например, размещать новые файлы на сервере, а также удалять файлы, если вы можете угадать действительный путь.
Короче говоря ... событие loadBeforeSend не вызывается для встроенного редактирования или редактирования формы ... Я вижу, что оно запускается при полном запросе данных в сетке, но я получаю толькоserializeEditData
событие срабатывает, когда я отправляю из формы редактирования.
Я волнуюсь, потому что я вошел в исходные файлы jqgrid (grid.formedit.js
, grid.inlineedit.js
) и я не смог получить какие-либо совпадения с ключевыми словами beforesend, там отображается только serializeeditdata.
Я что-то пропустил?
Есть ли другой способ установить нужные мне заголовки наxhr
ajax объект сетка использует? В том, чтоxhr
объект выставлен сеткой?
Ниже у вас есть код, который я должен обработать события редактирования ... опять же, loadBeforeSend не срабатывает ...
Заранее спасибо, Serban
<code>$.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); } }); </code>