2010-04-20 5 views
22

Sto usando l'ultima versione di jqGrid: 3.6.4Impostazione del tipo di contenuto delle richieste effettuate da jQuery jqGrid

Questo mi sembra un semplice problema (o almeno lo ha fatto prima che ho trascorso un paio d'ore su di esso):

Quando la griglia invia una richiesta al server (ad un'azione di controllo), il suo tipo di contenuto è sempre:

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

e vorrei che fosse:

application/json; charset=utf-8 

ma non riesco a trovare il modo di impostare il tipo di contenuto (non esiste un'opzione contentType come si troverà su una chiamata $ .ajax per esempio).

Quindi, per chiarire, non sto chiedendo come impostare il tipo di contenuto su una richiesta del server jQuery, ma in particolare utilizzando jqGrid, che non fornisce un'opzione ovvia per farlo.

Grazie, Nigel.

Aggiornamento: La risposta di Oleg risolto risolto.

Qui ci sono le impostazioni delle opzioni per la griglia:

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

risposta

26

Come si può trovare nel codice di grid.base.js il $.ajax chiamata riempire la griglia di contenere presenta come segue:

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

Quindi è possibile utilizzare l'opzione ajaxGridOptions di jqGrid per impostare o sovrascrivere qualsiasi parametro della richiesta $.ajax. Perché io uso solo le richieste JSON al mio server, ho impostato l'impostazione generale della contentType come

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

Il ajaxRowOptions sono utilizzati in grid.inlinedit.js per l'editing di fila. Per il modulo di modifica ci sono altri parametri, che ho impostato anche come impostazione globale:

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

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

Come si può vedere il mio server è un servizio restfull (sviluppata principalmente nel WFC e il resto in ASP.NET MVC). Poiché $.jgrid.edit è un'impostazione per entrambi gli elementi "aggiungi" e "modifica", non ho potuto modificare solo per "modifica", quindi lo faccio nei parametri di navGrid().

L'ultimo parametro Ajax che è possibile trovare anche interessante da impostare è ajaxSelectOptions. Puoi impostarlo allo stesso modo di ajaxGridOptions. I parametri di ajaxSelectOptions sono utili se si utilizza il parametro dataUrl all'interno di editoptions o searchoptions. Io uso, ad esempio, dataUrl all'interno di colModel per la definizione di colonne del tipo edittype: 'select'. I valori possibili dell'opzione select verranno caricati dal server per la modifica in linea o del modulo o all'interno della finestra di dialogo di ricerca. Perché per il caricamento di tali dati vengono utilizzati ajax, c'è l'opzione ajaxSelectOptions corrispondente.

Cordiali saluti.

+0

Grazie Oleg!Questo lo ha fatto; Ho aggiunto il mio codice di esempio alla domanda. – Nigel

+0

Molto strano! Io uso anche jqGrid 3.6.4. Perché uso jQuery 1.4.2 Devo usare la versione da http://github.com/tonytomov/jqGrid, ma le funzionalità di ajax esistono a partire da 3.6 (3.6.0). Puoi cercare ajaxGridOptions nella tua versione di jqGrid per verificarlo. Suggerisco di caricare l'ultima versione non compressa di jqGrid da http://github.com/tonytomov/jqGrid, modificare il codice per utilizzare questo js-file (ad esempio grid.loader.js), impostare i breakpoint all'interno di grid.base.js (cerca .ajax) e all'interno di jQuery.ajax (anche jQuery-1.4.2.js non compresso). Puoi anche fare un test con l'impostazione $ .jgrid.defaults. – Oleg

+0

Congratulazioni !!! Un buon problema è un problema risolto! – Oleg

Problemi correlati