通过AJAX发送表/网格对象

时间:2014-07-08 14:22:16

标签: javascript php jquery ajax jqxgrid

简要说明......

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

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

  1. 以某种方式将整个网格对象字符串化为查询字符串,并向服务器发送1个AJAX请求。
  2. 或者,遍历每一行并为网格中的每一行执行AJAX请求
  3. 我遇到的问题是我无法弄清楚哪种方法更好,因为它们都有并发症。当用户试图通过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的最佳方法吗?

1 个答案:

答案 0 :(得分: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
};