4

この素晴らしいjqgridプラグインに少し問題があり、WCFデータサービス(実際にはそうではありませんが、非常によく似たodata4jサービス)で使用しようとしています。ちなみに、odataサービスでjqgridを使用することを考えている人がいる場合は、私に連絡してください。たとえば、グリッドxmlreaderを構成してodataxml構造を読み取る方法などの難しい質問に対する回答を見つけました。 ( ヒント:

含むjquery.xmlns.js

.....
$.xmlns.m = "http://schemas.microsoft.com/ado/2007/08/dataservices/metadata";
$.xmlns.d = "http://schemas.microsoft.com/ado/2007/08/dataservices";
.....
var feedXmlReaderOptions = {
    root: "feed",
    row: "entry",
    repeatitems: false,
    id: "feed>entry>id"
};
....
    colModel: [
    {
        name: "clmNumKey", 
        index: "clmNumKey", 
        width: 150, 
        xmlmap: "d|clmNum",
        editable: true
    }
    ....
)

とにかく、問題は、odataサービスが、httpメソッドではなく、通常のPOSTでカスタムリクエストヘッダーとして送信される編集操作(DELETE、PUT、MERGE)に対応するメソッドを必要とすることです。その理由は、ほとんどのファイアウォールがPUTおよびDELETE httpメソッドの通過を許可していないためと思われます。これは、たとえば、推測できる場合に備えて、サーバーに新しいファイルを配置したり、ファイルを削除したりできるためです。有効なパス。簡単に言うと、loadBeforeSendイベントはインライン編集またはフォーム編集ではトリガーされません...グリッドの完全なデータ要求でトリガーされていることがわかりますがserializeEditData、編集フォームから送信したときにのみイベントがトリガーされます。jqgridソースファイル(grid.formedit.jsgrid.inlineedit.js)そして、beforesendキーワードでヒットを取得できませんでした。そこには、serializeeditdataのみが表示されています。私は何かが足りないのですか?xhrグリッドが使用するajaxオブジェクトに必要なヘッダーを設定する別の方法はありますか?そのxhrオブジェクトはグリッドによって公開されていますか?

以下に、編集イベントを処理する必要があるコードがあります...繰り返しますが、loadBeforeSendはトリガーされません...

よろしくお願いします、セルバン

$.extend($.jgrid.edit, {
    closeAfterEdit: true,
    closeAfterAdd: true,
    ajaxEditOptions: {
        contentType: "application/json"
    },
    mtype: 'POST',
    loadBeforeSend: function(xhr)
    {
        xhr.setRequestHeader("X-HTTP-Method", "MERGE");
        return xhr;
    },        
    serializeEditData: function (data) {
        delete data.oper;
        return JSON.stringify(data);
    }
});                                                  
4

1 に答える 1

3

loadBeforeSendで設定できるパラメータはありません$.jgrid.edit。の値は、 editGridRow$.jgrid.editのデフォルトオプションを定義します。

loadBeforeSend対応するAjaxリクエスト中に使用する必要があるコールバックを指定するには、ajaxEditOptions代わりに使用して指定する必要がありますbeforeSend$ .ajaxを参照)。

$.extend($.jgrid.edit, {
    closeAfterEdit: true,
    closeAfterAdd: true,
    ajaxEditOptions: {
        contentType: "application/json",
        beforeSend: function (jqXHR, settings) {
            jqXHR.setRequestHeader("X-HTTP-Method", "MERGE");
        }
    },
    //mtype: 'POST', - it's already default
    serializeEditData: function (data) {
        delete data.oper;
        return JSON.stringify(data);
    }
});
于 2012-04-23T20:08:37.940 に答える