div - Establecer el tipo de contenido de las solicitudes realizadas por jQuery jqGrid
jquery remove (1)
Estoy usando la última versión de jqGrid : 3.6.4
Esto parece un problema simple (o al menos lo hizo antes de pasar unas horas en él):
Cuando la grilla envía una solicitud al servidor (a una acción del controlador), su tipo de contenido siempre es:
application/x-www-form-urlencoded; charset=UTF-8
y me gustaría que fuera:
application/json; charset=utf-8
pero no puedo encontrar la forma de configurar el tipo de contenido (no hay una opción contentType como encontraría en una llamada $ .ajax, por ejemplo).
Solo para aclarar, no estoy preguntando cómo configurar el tipo de contenido en una solicitud del servidor jQuery, sino específicamente usando jqGrid, que no proporciona una opción obvia para hacerlo.
Gracias, Nigel.
Actualización: la respuesta de Oleg lo solucionó.
Aquí están las configuraciones de opciones para la grilla:
jQuery("#ContactGridList").jqGrid({
url: ''/ContactSelect/GridData/'',
datatype: ''json'',
ajaxGridOptions: { contentType: ''application/json; charset=utf-8'' },
mtype: ''POST'',
...
Cómo puede encontrar en el código de grid.base.js que la llamada $.ajax
llena la grilla contiene lo siguiente:
$.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));
Entonces puede usar la opción ajaxGridOptions
de jqGrid para establecer o anular cualquier parámetro de la solicitud $.ajax
. Como utilizo solo solicitudes JSON en mi servidor, establezco la configuración general de contentType
como
$.extend($.jgrid.defaults, {
datatype: ''json'',
{ajaxGridOptions: { contentType: "application/json" },
{ajaxRowOptions: { contentType: "application/json", type: "PUT" },
...
});
Las ajaxRowOptions
se utilizan en grid.inlinedit.js para la edición de filas. Para la edición del formulario hay otros parámetros, que también configuro como configuración global:
$.extend($.jgrid.edit, {
ajaxEditOptions: { contentType: "application/json" },
...
});
$.extend($.jgrid.del, {
ajaxDelOptions: { contentType: "application/json" },
mtype: "DELETE",
...
});
Cómo puede ver que mi servidor es un servicio RESTfull (desarrollado principalmente en WFC y el resto en ASP.NET MVC). Como $.jgrid.edit
es una configuración para los elementos "agregar" y "modificar", no pude cambiar mtype: "PUT"
para "editar" solamente, así que hago esto en los parámetros de navGrid()
.
El último parámetro ajax que puede encontrar también interesante de establecer es ajaxSelectOptions
. Puede configurarlo de la misma manera que ajaxGridOptions
. Los parámetros de ajaxSelectOptions
son útiles si usa el parámetro dataUrl
dentro de editoptions
o searchoptions
. Utilizo, por ejemplo, dataUrl
dentro de colModel
para definir columnas del tipo edittype: ''select''
. Los valores posibles de la opción de selección se cargarán desde el servidor para la edición en línea o en forma o dentro del diálogo de búsqueda. Porque para tal carga de datos se utilizan ajax, existe la opción correspondiente ajaxSelectOptions
.
Atentamente.