我正在使用 jQuery 和 jqGrid 的单元格编辑功能,它在离开每个单元格时将新的单元格值提交给服务器。在我的特定应用程序中,当单元格更改时,它可能会影响同一行中的其他(计算的)列,并且可能影响其他行中的列,因此我需要更新可能遍布整个网格的值。
在我的例子中,计算本身是在提交单元格并更新数据库时在服务器上执行的,所以我需要获取更新的数据来更新网格。我想让单元格编辑尽可能快,但也要保持行更新。我还想只更新服务器确定已修改的行。我还想要一些通用且可重复使用的东西。
我不知道这如何转换为 PHP,但这是我在 JavaScript 中所做的。
var xhrUpdate = null;
// Handle jqGrid's afterSubmitCell.
$("#someGridId").jqGrid(
"setGridParam",
"afterSubmitCell",
function (response, rowid, name, val, iRow, iCol) {
// If an ajax request is already in progress from the last cell edit,
// abort it since the data is now moot with the new cell update.
// Sorry server, nobody's listening!
if (xhrUpdate != null) {
xhrUpdate.abort();
xhrUpdate = null;
}
// Call the generic grid update function (see below) asynchronously.
xhrUpdate = updateGrid(
"someGridId",
"someUpdateUrl",
{ someParam: someParamValue, ... },
"someIDFieldThatIdentifiesTheGridRow",
true);
// Return success.
return [true, ""];
});
// This function updates a jgGrid which already contains data.
// It will only update the rows and columns that are returned
// from the server.
function updateGrid(grid_id, url, data, idField, async) {
var grid = $("#" + grid_id)
return $.ajax({
async: async,
type: "GET",
datatype: "json",
url: url,
data: data,
success: function (result) {
// Loop over the returned rows.
$.each(result, function (index, row) {
// Loop over the returned fields in each row.
$.each(row, function (key, value) {
// Set the corresponding cell value.
// This won't touch any cell's that aren't
// represented in the JSON data.
grid.jqGrid("setCell", row[idField], key, value);
});
});
}
});
}
注意事项:
1)这肯定会给服务器带来负担。
2) 作为异步,这不处理坏的单元格数据或来自单元格提交的其他异常服务器响应。它非常乐观,但如果需要,可以处理这些问题。
3)服务器需要有返回适当数据的智能,或者你可以返回所有内容。
抱歉,它不是 PHP,但我希望这会有所帮助。