jquery - JQGrid 与 WCF 数据服务 (OData);在编辑模式下未调用 loadBeforeSend;无法执行 setRequestHeader

标签 jquery jqgrid wcf-data-services odata4j

我对这个出色的 jqgrid 插件以及我尝试将其与 WCF 数据服务(不是真正的,而是非常相似的 odata4j 服务)一起使用时遇到了一些问题。 顺便说一句,如果有人正在考虑将 jqgrid 与 odata 服务一起使用,请给我写一封信,我找到了一些难题的答案,例如,如何配置网格 xmlreader 来读取 odata xml 结构,从而克服 jquery 命名空间搜索问题( 提示:

包含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 上的自定义请求 header 发送,而不是作为 http 方法。原因似乎是大多数防火墙不允许 PUT 和 DELETE http 方法通过,因为这就是您可以在服务器上放置新文件以及删除文件的方式,以防您猜到有效路径。 长话短说...内联或表单编辑不会触发 loadBeforeSend 事件...我可以看到它是在网格的完整数据请求上触发的,但我只触发了 serializeEditData 事件当我从编辑表单提交时。 我很担心,因为我进入了 jqgrid 源文件(grid.formedit.jsgrid.inlineedit.js),并且无法使用 beforesend 关键字获得任何命中,只有序列化编辑数据显示在那里。 我错过了什么吗? 是否有另一种方法可以在网格使用的 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);
    }
});                                                  

最佳答案

没有可以通过$.jgrid.edit设置的loadBeforeSend参数。 $.jgrid.edit 中的值定义了 options 的默认值 editGridRow

要指定在相应的 Ajax 请求期间应使用的 loadBeforeSend 回调,您应该使用 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);
    }
});

关于jquery - JQGrid 与 WCF 数据服务 (OData);在编辑模式下未调用 loadBeforeSend;无法执行 setRequestHeader,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10286780/

相关文章:

javascript - 多个图像上传在页面中使用了两次,但第一个有效,另一个无效

asp.net-mvc - 关于 jqGrid 列标题过滤器和高级过滤对话框的两个相关问题

jquery - 通过 WCF 数据服务使用 OData 时出现 JSON 错误

jquery - 如何在 mvc3 中将值列表发送到 Controller

jquery - 如何找到 Jqgrid 索引号?

c# - 在客户端记录 wcf 数据服务 (OData) 请求 url

.net - SQLCLR 触发器与 Windows 服务。什么时候适合使用SQLCLR?

javascript - 如何使用 jquery 或 javascript 从 CSSTEXT 获取值

javascript - 调用并结束ajax函数

javascript - 无法在另一个日期选择器中更改日期选择器参数吗?