【问题标题】:How to reaload (refill) jqGrid data from an ajax reponse (from a Struts 2 action)?如何从 ajax 响应(来自 Struts 2 动作)重新加载(重新填充)jqGrid 数据?
【发布时间】:2011-12-16 15:49:51
【问题描述】:

我有这段代码只是为了从已经加载的 jqGrid 发送数据:

jQuery("#bedata").click(function(){ //Function for button "bedata"

 var postData = "SOME DATA TO SEND"

//Sending data:
$.ajax({
    type: "POST";
    url: "GuardaFila.action", //Action called to data treatament (Struts 2)
    data : {
        jgGridData: postData, //PARAMETER jgGrdData with variable "postData" value
        customData: "someinfo" //Just another parameter called "customData" with more data,
    },

    dataType:"json",
    contentType: "application/x-www-form-urlencoded; charset=utf-8",

//Success function has the key that I am looking for:
    success: function(response, textStatus, xhr) {
        //SOME CODE HERE TO REFILL jqGrid.
        alert("success");
     },
    error: function(xhr, textStatus, errorThrown) {
        alert("error");
    }

});
});

jqGrid之前已经通过这种方式创建了:

  jQuery("#rowed3").jqGrid({
                url:'CargaTabla.action',
                datatype: "json",
                colNames:['id', 'Direccion', 'Nombre'],
                colModel:[
                    {name:'id',index:'id', width:55},
                    {name:'direccion',index:'direccion', width:90, editable:true},
                    {name:'nombre',index:'nombre', width:100,editable:true}
                ],
                jsonReader: {
                    root: 'gridModel',
                    id: '0',
                    cell :"",
                    repeatitems: false
                },


(....... etc)

所以,jqGrid 表的 id 是#rowed3。我知道在ajax函数中:

        success: function(response, textStatus, xhr) {
        //SOME CODE HERE TO REFILL jqGrid.
        alert("success");
     },

response 参数有一个新的 JSON 格式的网格内容。我尝试了一些方法来用它的数据重新填充网格,因为它的“datastr”参数设置了它的内容和其他参数。有人遇到过这个问题吗?

谢谢。

【问题讨论】:

    标签: jquery jqgrid struts2


    【解决方案1】:

    不要在这里重新发明轮子。 jqGrid 已经知道如何获取数据,所以你不需要调用$.ajax。只需更改网格参数并告诉它做它的事情(从记忆中;如果需要,正确的函数名称,但这会给你这个想法):

    var opts = { url: "GuardaFila.action", postData: postData };
    grid.setGridParam(opts);
    grid.trigger("reloadGrid");
    

    【讨论】:

    • 大家好。谢谢你们的回复。是的,这是真的,jqGrid 已经知道从哪里获取数据,但是我需要执行 ajax callig 将数据从网格发送到服务器以升级数据库。我正在进行 ajax 调用,我想使用它的响应来重新填充网格。不调用操作(url)来做到这一点。 ajax 调用完成后该操作完成。
    • 谢谢,它工作了 =) 与 var grid = jQuery("#rowed3");谢谢你俩。它比这更简单,在您的帮助下,我的 ActionClass 也可以在服务器上自动更新。真的很抱歉,我不能给你打分,但是,我需要 15 分:(。对不起。
    【解决方案2】:

    我想你可能正在寻找grid.addJSONData 方法。

    例如:

    success: function (data, textStatus) {
        if (textStatus == "success") {
           var grid = $("#rowed3")[0];
           grid.addJSONData(JSON.parse(data.d));
       }
    },
    

    请记住,您需要确保您的 JSON 数据格式与 JSON 阅读器中指定的格式相匹配。

    【讨论】:

    • 这可行,但它会破坏其他网格功能(例如,分页、搜索),因为网格仍为旧 URL 配置等。
    • @Craig 这是真的! grid.trigger("reloadGrid");如果只需要这些,这是一个更简单的解决方案。 +1 :)
    • $("#rowed3")[0] 是我调试中的 HTMLTable。我怎样才能再次将 jqGrid 作为对象?
    • 也许 var grid = jQuery("#rowed3");代替?
    • var grid = jQuery("#rowed3") 代替 var grid = $("#rowed3")[0];为我工作。真的很抱歉,我还不能给你打分:-(
    猜你喜欢
    • 2013-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-11
    • 2011-11-07
    • 2015-04-03
    • 2014-03-30
    • 1970-01-01
    相关资源
    最近更新 更多