Festlegen des Inhaltstyps von Anforderungen, die von jQuery jqGrid ausgeführt werden

Ich verwende die neueste Version von jqGrid : 3.6.4

Das scheint ein einfaches Problem zu sein (oder zumindest bevor ich ein paar Stunden damit verbracht habe):

Wenn das Grid eine Anfrage an den Server (an eine Controller-Aktion) sendet, ist sein Inhaltstyp immer:

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

und ich möchte es sein:

 application/json; charset=utf-8 

aber ich kann keine Möglichkeit finden, den Inhaltstyp zu setzen (es gibt keine contentType-Option, wie Sie sie zum Beispiel bei einem $ .ajax-Aufruf finden würden).

Um zu verdeutlichen, frage ich nicht, wie man den Inhaltstyp auf eine jQuery-Serveranfrage setzt, sondern speziell jqGrid verwendet, was keine offensichtliche Option dafür bietet.

Danke, Nigel.

Update: Olegs Antwort behoben triggerse es.

Hier sind die Optionen für das Raster:

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

   

Wie Sie im Code von grid.base.js finden können, sieht der Aufruf von $.ajax wie folgt aus:

 $.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)); 

Sie können ajaxGridOptions Option ajaxGridOptions von jqGrid verwenden, um einen beliebigen Parameter der $.ajax Anforderung festzulegen oder zu überschreiben. Da ich nur JSON-Anfragen an meinen Server verwende, setze ich allgemeine Einstellungen für contentType

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

Die ajaxRowOptions werden in grid.inlinedit.js für die Zeilenbearbeitung verwendet. Für die Formularbearbeitung gibt es andere Parameter, die ich auch als globale Einstellung einstelle:

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

Wie Sie sehen können, ist mein Server ein RESTfull-Dienst (hauptsächlich in WFC und der Rest in ASP.NET MVC entwickelt). Da $.jgrid.edit eine Einstellung sowohl für “add” als auch für “modify” ist, konnte ich mtype: "PUT" nicht ändern mtype: "PUT" für “edit”, also mache ich das in Parametern von navGrid() .

Der letzte Ajax-Parameter, den Sie ebenfalls interessant finden könnten, ist ajaxSelectOptions . Sie können es auf die gleiche Weise wie ajaxGridOptions . Parameter von ajaxSelectOptions sind nützlich, wenn Sie den Parameter dataUrl innerhalb von editoptions oder searchoptions . Ich benutze zum Beispiel dataUrl in colModel zum Definieren von Spalten vom Typ edittype: 'select' . Die möglichen Werte der Auswahloption werden vom Server für die Inline- oder Formularbearbeitung oder innerhalb des Suchdialogs geladen. Da für solche ajaxSelectOptions verwendet wird, gibt es entsprechende ajaxSelectOptions Optionen.

Freundliche Grüße.