Установка типа контента запросов, выполненных jQuery jqGrid

Я использую последнюю версию jqGrid: 3.6.4

Это походит на простую проблему (или по крайней мере она сделала, прежде чем я провел несколько часов на нее):

Когда сетка отправляет запрос к серверу (к действию контроллера), его тип контента всегда:

application/x-www-form-urlencoded; charset=UTF-8

и я хотел бы, чтобы это было:

application/json; charset=utf-8

но я не могу найти способ установить тип контента (нет никакой contentType опции, поскольку Вы нашли бы на $ .ajax вызов, например).

Так просто для уточнения я не спрашиваю, как установить тип контента на запросе к серверу jQuery, но конкретно использующий jqGrid, который не предоставляет очевидную возможность для того, чтобы сделать это.

Спасибо, Nigel.

Обновление: зафиксированный ответ Oleg решил его.

Вот настройки опции для сетки:

jQuery("#ContactGridList").jqGrid({
        url: '/ContactSelect/GridData/',
        datatype: 'json',
        ajaxGridOptions: { contentType: 'application/json; charset=utf-8' },
        mtype: 'POST',
        ...

22
задан Nigel 20 April 2010 в 23:26
поделиться

1 ответ

Как вы можете найти в коде grid.base.js вызов $. Ajax , заполняющий grid contain выглядит следующим образом:

$.ajax($.extend({
    url: ts.p.url,
    type: ts.p.mtype,
    dataType: dt,
    data: $.isFunction(ts.p.serializeGridData) ?
             ts.p.serializeGridData.call(ts, ts.p.postData) : ts.p.postData,
    complete: function (req, st) {
       ...
    }
    ...
}, $.jgrid.ajaxOptions, ts.p.ajaxGridOptions));

Таким образом, вы можете использовать опцию ajaxGridOptions в jqGrid для установки или переопределения любого параметра запроса $. ajax . Поскольку я использую только запросы JSON к моему серверу, я установил общие настройки contentType , например

$.extend($.jgrid.defaults, {
    datatype: 'json',
    {ajaxGridOptions: { contentType: "application/json" },
    {ajaxRowOptions: { contentType: "application/json", type: "PUT" },
    ...
});

ajaxRowOptions используются в grid.inlinedit.js для строки редактирование. Для редактирования формы есть и другие параметры, которые я также установил как глобальные:

$.extend($.jgrid.edit, {
    ajaxEditOptions: { contentType: "application/json" },
    ...
});

$.extend($.jgrid.del, {
    ajaxDelOptions: { contentType: "application/json" },
    mtype: "DELETE",
    ...
});

Как вы можете видеть, мой сервер - это служба RESTfull (разработанная в основном в WFC, а остальные - в ASP.NET MVC). Поскольку $. Jgrid.edit является настройкой как для «добавления», так и для «изменения» элементов, я не мог изменить mtype: «PUT» только для «редактирования», поэтому я это в параметрах navGrid () .

Последний параметр ajax, который вам также может быть интересно установить, - это ajaxSelectOptions . Вы можете установить его так же, как ajaxGridOptions . Параметры ajaxSelectOptions полезны, если вы используете параметр dataUrl внутри editoptions или searchchoptions . Я использую, например, dataUrl внутри colModel для определения столбцов типа edittype: 'select' . Возможные значения параметра выбора будут загружены с сервера для встроенного редактирования или редактирования формы или внутри диалогового окна поиска. Поскольку для такой загрузки данных используется ajax, существует соответствующая опция ajaxSelectOptions .

С уважением.

26
ответ дан 29 November 2019 в 05:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: