2012-04-23 10 views
4

この素晴らしいjqgridプラグインと、WCF Data Services(実際はそうではありませんが、非常によく似たodata4jサービス)と一緒に使用しようとする私は少し問題があります。 ところで、誰かがodataサービスでjqgridを使用することを考えているなら、私にラインを送ってください。たとえば、グリッドxmlreaderを設定してjdata xml構造体を読み込んでjquery名前空間検索を破るような難しい質問に答えました。問題( ヒント:WCFデータサービス(OData)を使用したJQGrid。 loadBeforeSendは編集モードでは呼び出されません。 Can not do setRequestHeader

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サービスは上のカスタムリクエストヘッダとして送信する編集操作を(DELETE、PUT、MERGE)対処方法が必要だということです通常のPOSTではなく、HTTPメソッドであることを示しています。その理由は、ほとんどのファイアウォールではPUTとDELETEを許可しないそれは有効なパスを推測できる場合に備えて、例えばファイルを削除するだけでなく、サーバー上に新しいファイルを置くことができるからです。 短いストーリー... 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); 
    } 
});             

答えて

3

一切ありませんloadBeforeSendパラメーターは$.jgrid.editで設定できます。 $.jgrid.editの値は、デフォルト値optionseditGridRowと定義しています。

は($.ajaxを参照してください)あなたがbeforeSendの代わりにajaxEditOptionsを使用して指定する必要があり、対応するAjaxリクエストの際に使用されるべきであるloadBeforeSendコールバックを指定するには:

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

オレグは、あなたがバディをロック!それはうまくいって、今私は私の欲しいところに私のリクエストヘッダを持っています。再度、感謝します。 – nenea

+0

@ user1352052:ようこそ!問題が解決した場合、回答を受け入れることができます(http://meta.stackexchange.com/a/5235/147495)。ご多幸を祈る! – Oleg

関連する問題