我对这个出色的 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.js
、grid.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/