jqGrid 使用jQuery.ajax 与服务器通信。要以 JSON 格式发送数据,必须做两件事:
- 应该以 JSON 格式对数据进行编码。通常使用
JSON.stringify 进行编码。
- 应该使用选项
contentType 选项设置为"application/json" 或"application/json; charset=utf-8" 值。它在请求中包含 HTTP 标头 ContentType。标头通知服务器,发送到服务器的数据以 JSON 格式编码。
也可以选择使用dataType: "json" 选项。如果 Ajax 调用的响应也应该包含 JSON 编码数据,则使用该选项。
现在关于在 jqGrid 内部实现上述要求。 jqGrid 可以在很多地方使用 jQuery.ajax。您使用 jqGrid 的复古版本 4.4.4。它的可能性要小得多,而且它是在非常旧的网络浏览器、旧的 jQuery 等时代开发的。我提醒您,在 jqGrid 4.4.4 发布之日,一个使用 Chrome 24、Firefox 18、Internet Explorer 10、Safary 6.0.2。 IE8(和 Internet Explorer)是桌面上最流行的网络浏览器(仅在 Windows 下)。现在可以与 Chrome 54、Firefox 50、Microsoft Edge 38 和 Internet Explorer 11、Safari 10 一起使用。您真的相信 jqGrid 4.4.4 可以很好地与现代网络浏览器一起使用吗?我强烈建议您更新到free jqGrid 的当前版本(4.13.5)。
如果你仍然必须使用 jqGrid 4.4.4 那么你应该使用
{
label: "Edit Actions",
name: "actions",
width: 100,
formatter: "actions",
formatoptions: {
keys: true,
delOptions: {
serializeDelData: function (postData) {
return JSON.stringify(postData);
},
ajaxDelOptions: {
contentType: "application/json"
}
}
}
}
根据使用其他方法,必须在许多不同的地方设置delGridRow 的选项。问题是:一个人不仅直接使用delGridRow方法,而且间接使用。例如formatter: "actions"、navGrid、inlineNav 使用内联编辑或表单编辑选项。您必须使用相应的深层选项来指定delGridRow 的自定义选项。免费的 jqGrid 有 jqGrid 选项,它允许为方法的所有间接调用指定公共选项。可以使用inlineEditing、formEditing、formDeleting、formViewing、searching 来指定所有方法使用的默认选项。因此你可以使用 jqGrid 选项
inlineEditing: {
keys: true
},
formDeleting: {
serializeDelData: function (postData) {
return JSON.stringify(postData);
},
ajaxDelOptions: {
contentType: "application/json"
}
}
之后,您可以删除formatter: "actions" 的formatoptions 属性。如果你使用navGrid,那么它在删除时也会使用相同的选项。
您可以在the wiki article 中阅读有关指定选项的新方法的更多信息。
顺便说一句,您可能会遇到内联编辑的严重问题。您可能应该使用 jqGrid 的 ajaxRowOptions 选项和 serializeRowData 回调在内联编辑期间进行 JSON 编码。免费的 jqGrid 支持相同的选项,并允许您在 inlineEditing 内另外使用 ajaxSaveOptions 和 serializeSaveData。