3

私はjqGridが初めてです。ただし、主にオレグの回答の助けを借りて、jqGridを使用してアプリケーションを正常に開発できました。ドロップダウンの選択に基づいて jqGrid をロードします。データは Web サービス (asmx) ファイルから返されます。コードはこのようなものです

jQuery("#list").jqGrid({
    url: '<%= ResolveClientUrl("OfficeData.asmx/GetSCFS_RO") %>',
    editurl: '<%= ResolveClientUrl("OfficeData.asmx/SaveFPSUpdates") %>',
    datatype: "json",
    mtype: 'POST',
    ajaxGridOptions: { contentType: 'application/json; charset=utf-8' }, 
    ajaxEditOptions: { contentType: 'application/json; charset=utf-8', dataType: 'json' },
    serializeGridData: function (postData) {
        // return null;
        if (postData.OfficeId === undefined) { postData.OfficeId = 0; }
        else {
            postData.OfficeId = officeId;
        }
        return JSON.stringify(postData);
    }, 
    jsonReader: { repeatitems: false, root: "d.rows", page: "d.page",
        total: "d.total", records: "d.records" },
    colNames: ['FPSCode',  'Owner Name ', 'Licese_No', 'ShopAddress', 'Village',
        'License Valid From', 'Valid To','FPS Type','WholeSalerName',  'Mobile'],
    colModel: [{ name: 'FPSCode', index: 'FPSCode', width: 60, align: 'left',
        editable:true, editrules:{required:true}, 
        editoptions:{ 
            dataInit: function(element) { 
                $(element).attr("readonly", "readonly"); 
            } 
        }
    },
    ......

Firebug は次の Post ヘッダーを表示します

応答ヘッダー

......
Content-Type      application/json; charset=utf-8
Date              Tue, 20 Nov 2012 14:20:34 GMT
Server            ASP.NET Development Server/10.0.0.0
X-AspNet-Version  4.0.30319

リクエスト ヘッダー

Accept            application/json, text/javascript, */*; q=0.01
Accept-Encoding   gzip, deflate
Accept-Language   en-US,en;q=0.5
Cache-Control     no-cache
Connection        keep-alive
Content-Length    105
..........

予想どおり、私が受け取る応答は JSON オブジェクトです。

ただし、フォームの送信は常に次のように送信Content-Typeされますapplication/x-www-form-urlencoded; charset=UTF-8

応答ヘッダー

Cache-Control     private, max-age=0
Connection        Close
Content-Length    95
Content-Type      text/xml; charset=utf-8
Date              Tue, 20 Nov 2012 14:20:46 GMT
Server            ASP.NET Development Server/10.0.0.0

リクエスト ヘッダー

Accept            */*
Accept-Encoding   gzip, deflate
Accept-Language   en-US,en;q=0.5
Cache-Control     no-cache
Connection        keep-alive
Content-Length    254
Content-Type      application/x-www-form-urlencoded; charset=UTF-8
Cookie            ASP.NET_SessionId=utts2wlhdto4xhae34fzqkt4
Host              localhost:18017
Pragma            no-cache
Referer           Account/FPSUpdate.aspx
User-Agent        Mozilla/5.0 (Windows NT 6.1; WOW64; rv:16.0) Gecko/20100101 Firefox/16.0
X-Requested-With  XMLHttpRequest
X-AspNet-Version  4.0.30319

Stackoverflowで提案されているように、私は使用しました

ajaxEditOptions:  { contentType: 'application/json; charset=utf-8', dataType: 'json' } , 

ajaxEditoptionsatでも使ってみました

jQuery.extend(jQuery.jgrid.edit, {
    ajaxEditOptions:  { contentType: 'application/json; charset=utf-8', dataType: 'json' },
    ...
});

ただし、に変更はありませんContent-Type。結果として、私は常に更新のためにサーバーから XML 応答を受け取ります。サーバーからの出力は

<string xmlns="http://tempuri.org/">Data Saved</string>

Mime タイプを JSON に修正できません。助けてください。

4

1 に答える 1

1

まず第一に、私の古い答えがあなたを助けることができてうれしいです.

ajaxEditOptionsjqGrid のオプションとして を使用するのは、本当に正しくありません。これはeditGridRowのオプションであるため、 navGridprmEditのandprmAddオプションにプロパティとして含めるか、使用する必要があります

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

非常に近いオプションを使用しようとしたと書いています。もう一度確認することをお勧めします。行が確実に実行されるようにするには、JavaScript スクリプトの先頭に行を含めることができます。

個人的に使ってます

$.extend($.jgrid.defaults, {
    ajaxGridOptions: { contentType: "application/json" },
    ajaxRowOptions: { contentType: "application/json", async: true },
    ajaxSelectOptions: { contentType: "application/json", dataType: "JSON" },
    ...
});
$.extend($.jgrid.edit, {
    ajaxEditOptions: { contentType: "application/json" },
    recreateForm: true,
    serializeEditData: function(postData) {
        return JSON.stringify(postData);
    },
    ....
});
$.extend($.jgrid.del, {
    ajaxDelOptions: { contentType: "application/json" }
    ...
});

すべてが期待どおりに機能しContent-Type: application/jsonます。対応するリクエストの HTTP ヘッダーで確認できます。

更新: jqGrid の奇妙な動作の原因は、ここでtrirand に報告した小さなバグだと思います。のコピーに対応する変更を自分でjquery.jqGrid.src.js行うか、ルールを保持できます。非スカラー (オブジェクト) オプションを$.jgrid.editlikeで定義する場合ajaxEditOptionsは、 のオプションを使用しないでくださいnavGridバグ レポートで説明したように jqGrid のコードを修正すると、この制限はなくなります。

UPDATED 2 : バグは、github のメイン コードで既に修正されています (こちらを参照)。そのため、jqGrid の次のバージョン (4.4.1 以降) では、上記の問題は発生しないはずです。

于 2012-11-20T20:33:37.700 に答える