2

简要说明...

我的站点中有一个可编辑的 jqWidgets 网格,但与传统的可编辑网格不同,我不想在编辑一行时更新数据库,而是想在按下“保存”按钮时立即更新整个网格。

考虑到这一点,我只能看到两种可能的选择:

  1. 以某种方式将整个网格对象字符串化为查询字符串并向服务器发送 1 个 AJAX 请求。
  2. 或者,遍历每一行并对网格中的每一行执行 AJAX 请求

我遇到的问题是,我根本无法弄清楚哪种方法更好,因为它们都有其复杂性。当用户试图通过 POST 请求传递网格的全部内容时,选项 1 上的查询字符串可能是天文数字并超出内存限制。但是,后一种解决方案可能会因为它正在为网格中的每一行执行 AJAX 请求而导致问题。想象一下,如果网格中有 100 行,甚至 1000 行!

我的问题

那么,任何人都可以想出一种有效的方法来实现这一点而不会超出内存限制,同时又避免发出多个 AJAX 请求?


更多信息

如果上述内容不清楚,请考虑以下 javascript 数组:

[
    { name: 'Ben', age: 23, occupation: 'Developer' },
    { name: 'Charlie', age: 24, occupation: 'Receptionist' },
    { name: 'Jemima', age: 18, occupation: 'Designer' }
]

现在,尝试确定在一个查询中将所有这些信息传递给 PHP 的最佳方法?

4

1 回答 1

0

在您的源对象上,有一个 updaterow 函数,它接受参数 rowid、newdata 和 commit:

updaterow: function(rowid, newdata, commit)

newdata 是一个 json 对象,表示网格中更新的行,commit 是一个回调,您需要调用它来考虑更改已被接受。

在此函数中,您可以获取更新后的 rowdata 对象并将其放入基于 rowid 的关联数组中(以确保仅将更改的行发送回一次)。最后,调用

commit(true)

您现在可以在单击按钮时调用一个函数,该函数使用更新的行数据执行 ajax 发布:

var editedRows = {};
var source = {
  localdata: [], // your data for the grid
  datatype: 'json',
  datafields: [
    // define columns and types
  ],
  updaterow: function(rowid, datarow, commit) {
    editedRows[rowid] = datarow;
    commit(true);
  }
}

var saveData = function() {
  // post editedRows, clear editedRows on success
};
于 2014-07-14T17:57:49.893 回答