JQGrid mit WCF Data Services (OData); loadBeforeSend wird im Bearbeitungsmodus nicht aufgerufen. SetRequestHeader kann nicht ausgeführt werden

Ich habe ein kleines Problem mit diesem fantastischen jqgrid-Plugin und meinem Versuch, es mit WCF Data Services zu verwenden (nicht wirklich, aber mit den sehr ähnlichen odata4j-Diensten). Übrigens, wenn jemand darüber nachdenkt, jqgrid mit Odata-Diensten zu verwenden, senden Sie mir bitte eine Nachricht. Ich habe Antworten auf schwierige Fragen gefunden, z (Hinweise:

umfassenjquery.xmlns.js

<code>.....
$.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
    }
    ....
)
</code>

Das Problem ist jedoch, dass Odata-Dienste die Methode, die den Bearbeitungsvorgang (DELETE, PUT, MERGE) adressiert, als benutzerdefinierten Anforderungsheader auf einem normalen POST senden müssen, anstatt eine http-Methode zu sein. Der Grund dafür scheint zu sein, dass die meisten Firewalls die http-Methoden PUT und DELETE nicht zulassen, da Sie auf diese Weise beispielsweise neue Dateien auf dem Server ablegen und Dateien löschen können, falls Sie dies erraten können gültiger Pfad. Lange Rede kurzer Sinn ... das loadBeforeSend -Ereignis wird nicht für die Inline- oder Formularbearbeitung ausgelöst ... Ich kann sehen, dass es bei einer vollständigen Datenanforderung des Rasters ausgelöst wird, aber ich erhalte nur dieserializeEditData Ereignis ausgelöst, wenn ich über das Bearbeitungsformular einreiche. Ich mache mir Sorgen, weil ich in die jqgrid-Quelldateien gegangen bin (grid.formedit.js, grid.inlineedit.js) und ich konnte keine Treffer mit den vorher gesendeten Schlüsselwörtern erhalten, nur serializeeditdata wird dort angezeigt. Vermisse ich etwas? Gibt es eine andere Möglichkeit, die Header, die ich brauche, auf der festzulegen?xhr Ajax-Objekt, das das Raster verwendet? Ist dassxhr Objekt durch das Gitter ausgesetzt?

Unten steht der Code, mit dem ich die Bearbeitungsereignisse behandeln muss ... wieder wird das loadBeforeSend nicht ausgelöst ...

Vielen Dank im Voraus, Serban

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

Antworten auf die Frage(1)

Ihre Antwort auf die Frage