我正在使用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,但我希望這可以幫助。
主持人改變了我的標題,但我特別尋求幫助PHP版本的jqgrid。此外,我應該注意到,我的網格中有列是根據其他列中的值進行計算的,這樣當列更改時,其他列也應該更改....因此需要重新加載網格。點擊網格左下方的刷新按鈕即可更新網格。我正在尋找按下該刷新按鈕的程序化等價物。 – xjoaniex