2010-04-20 20 views
22

JqGrid Ayarı):jQuery tarafından gerçekleştirilen isteklerin içerik tip I <a href="http://www.trirand.com/blog/?page_id=6" rel="noreferrer">jqGrid</a> son sürümünü kullanıyorum

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

ve bunu olmak istiyorum:

grid) bir kontrol etkisine (sunucusuna bir talep gönderir

, içeriği tipi her zaman

application/json; charset=utf-8 

Ancak içerik türünü belirlemenin hiçbir yolunu bulamadık (örneğin, $ .ajax çağrısında bulabileceğiniz hiçbir ContentType seçeneği yoktur).

Netleştirmek gerekirse, jQuery sunucu isteğinde içerik türünün nasıl ayarlanacağını değil, özellikle bunu yapmak için açık bir seçenek sağlamayan jqGrid kullanarak sormuyorum.

Teşekkürler, Nigel.

Güncelleme: Oleg'in yanıtı düzeltildi.

Eğer grid.base.js ızgara dolgu $.ajax çağrı içermesi kodunda bulabilirsiniz nasıl
jQuery("#ContactGridList").jqGrid({ 
     url: '/ContactSelect/GridData/', 
     datatype: 'json', 
     ajaxGridOptions: { contentType: 'application/json; charset=utf-8' }, 
     mtype: 'POST', 
     ... 

cevap

26

aşağıdaki gibidir::

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

ızgara seçeneği ayarları

$.ajax isteğinin herhangi bir parametresini ayarlamak veya geçersiz kılmak için ajaxGridOptions jqGrid seçeneğini kullanabilirsiniz. Benim sunucuya yalnızca JSON istekleri kullandığından, ben grid.inlinedit.js satır düzenleme için kullanılan

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

ajaxRowOptions gibi contentType genel ayarını ayarlayın. Form düzenlemek için ben küresel ayarı olarak da belirlenen diğer parametreleri vardır:

benim sunucu (WFC ağırlıklı geliştirilmiş ve ASP.NET MVC geri kalanı) bir RESTfull hizmetidir nasıl görebilirsiniz
$.extend($.jgrid.edit, { 
    ajaxEditOptions: { contentType: "application/json" }, 
    ... 
}); 

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

. $.jgrid.edit, "add" ve "modify" öğelerinin ikisi için bir ayar olduğundan, yalnızca "edit" için değiştiremedim, bu yüzden navGrid() parametrelerinde bunu yapıyorum.

Ayarlamak için ilginç bulabileceğiniz son ajax parametresi ajaxSelectOptions'dur. ajaxGridOptions ile aynı şekilde ayarlayabilirsiniz.veya searchoptions'un içinde dataUrl parametresini kullanırsanız ajaxSelectOptions parametreleri kullanışlıdır. edittype: 'select' türünde sütunları tanımlamak için colModel'un içinde dataUrl kullanın. Seçme seçeneğinin olası değerleri, satır içi veya form düzenleme veya arama iletişim kutusunun için sunucudan yüklenecektir. Bu tür veri yüklemeleri için ajax kullanıldığı için, karşılık gelen ajaxSelectOptions seçeneği vardır.

Saygılarımızla.

+0

Teşekkürler Oleg!Bu yaptı; Örnek kodumu soruya ekledim. – Nigel

+0

Çok garip! Ayrıca jqGrid 3.6.4 kullanıyorum. JQuery 1.4.2 kullanıyorum çünkü http://github.com/tonytomov/jqGrid adresinden sürümü kullanmam gerekiyor, ancak ajax özellikleri 3.6'dan başlıyor (3.6.0). Doğrulamak için jqGrid sürümünüzde ajaxGridOptions'ı arayabilirsiniz. JqGrid'in son sıkıştırılmamış sürümünü http://github.com/tonytomov/jqGrid adresinden yüklemenizi, bu js dosyalarını (örneğin grid.loader.js) kullanabilmeniz için kodu değiştirmenizi, grid.base.js içinde kesme noktaları belirlemenizi öneririm (.ajax'ı arayın) ve jQuery.ajax'ın (ayrıca sıkıştırılmamış jquery-1.4.2.js) içini arayın. Ayrıca $ .jgrid.default değerini ayarlayarak bir test de yapabilirsiniz. – Oleg

+0

Tebrikler! İyi bir problem çözülmüş bir problem! – Oleg

İlgili konular