jqgrid - 在ajax文件上载后刷新网格

时间:2010-12-21 07:37:54

标签: jquery ajax jqgrid

如何从网格外部刷新基于jqgrid的网格?在网格代码中存在调用reloadGrid的选项。但是,我想在jqgrid代码之外执行ajax文件上载后重新加载网格。如何在该上下文中调用reloadGrid

我意识到我可以完全重新加载整个页面,例如:location.reload();但是重新加载了整个页面并将我带回到网格结果的第一页,并且有点失败了使用ajax的目的首先上传文件。

部分代码:

从jqgrid中调用reloadGrid,如下所示:

$("#thegrid").trigger("reloadGrid");

但是从我的ajaxupload中调用它时什么都不做:

        onComplete: function(file, response) {
            if (response == 'success') {
                        //location.reload();
                        $("#thegrid").trigger("reloadGrid");
                    }else if (response == 'error') {
                        alert("Doh!");
                    }

如果我取消注释location.reload(),页面会重新加载但触发器未注释(如上例所示)根本没有任何反应。那我该如何重新加载这个网格呢?

2 个答案:

答案 0 :(得分:4)

创建代码的函数来加载jqgrid。 首先卸载Jqgrid,然后调用上一个函数:

$("#thegrid").GridUnload();
Loadthegrid();

我希望这会有所帮助。

答案 1 :(得分:3)

我认为在jqGrid之外使用$("#thegrid").trigger("reloadGrid")没有问题。可能问题在于onCompleteajaxupload之间$("#thegrid")的关系。

例如,您可以在jqGrid的同一页面上定义一个外部按钮,其中<table>元素具有id =“thegrid”并使用

$("#button").click(function() {
    if ($("#thegrid").length === 0) {
        alert("no element with id='thegrid' is found");
    }
    if ($.isFunction($("#thegrid").jqGrid) !== true) {
        alert("$('#thegrid') is not jqGrid");
    }
    var e = $("#thegrid").data("events");
    if (typeof(e) !== "undefined" && typeof(e.reloadGrid) !== "undefined") {
        $("#thegrid").trigger("reloadGrid");
    } else {
        alert("$('#thegrid') is not bound to 'reloadGrid' function");
    }
}

您将看到代码在没有任何警报的情况下工作。您可以在ajaxupload的onComplete处理程序中包含相同的代码。

要验证'reloadGrid'功能是否有效,您可以使用loadComplete

loadComplete: function() {
    alert("grid is loaded/reloaded");
}

更新:从jQuery 1.8开始,应该使用$._data($("#thegrid")[0], "events");代替$("#thegrid").data("events")来获取网格中所有事件的列表。