【问题标题】:jqgrid - refresh a grid after an ajax file uploadjqgrid - 上传 ajax 文件后刷新网格
【发布时间】:2010-12-21 07:37:53
【问题描述】:

如何从网格本身外部刷新基于 jqgrid 的网格?在网格代码中存在调用reloadGrid 的选项。但是,我想在 jqgrid 代码之外进行 ajax 文件上传后重新加载网格。在这种情况下我怎么能打电话给reloadGrid

我意识到我可以完全重新加载整个页面,例如:location.reload(); 但这会重新加载整个页面并将我放回网格结果的第一页,并且有点违背使用 ajax 上传文件放在首位。

一些代码:

reloadGrid 在 jqgrid 中调用如下:

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

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

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

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

【问题讨论】:

    标签: jquery ajax jqgrid


    【解决方案1】:

    制作一个函数来加载jqgrid。 并先卸载Jqgrid,调用之前的函数:

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

    我希望这会有所帮助。

    【讨论】:

    • 感谢您的回复,尽管我不太理解。我假设 GridUnload 是一种通过 jqGrid 可用的方法(是吗?),但是这个 LoadtheGrid ......这只是我首先要创建的加载它的代码的功能?我理解正确吗?
    • GridUnload 确实是一种可通过 JqGrid 获得的方法。 trirand.com/jqgridwiki/…
    • 而且 Loadthegrid() 确实是您自己的代码函数,它首先创建了您的网格。您理解正确。
    • 谢谢我可以快速解决我的问题.. +1 for ans stackoverflow.com/questions/15859346/…
    【解决方案2】:

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

    例如,您可以在与 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") 来获取网格中所有事件的列表。

    【讨论】:

    • 所以我到达了触发器并且 loadComplete 正在触发,但是我看不到网格中的任何变化。难道是我有 loadonce 的事实:真的吗?就像,网格正在重新加载,但只有它手头的本地数据,不包括新上传的数据?嗯……这似乎很可能,是吗?
    • @rg88:是的,如果你使用loadonce:true,一定是这样。从您的问题来看,您几乎没有包含关于 jaGrid 定义的任何内容。如果您使用loadonce:true 并希望从服务器重新加载数据,您应该将datatype 重置为'json'(第一次加载后datatype 更改为'local')。例如,请参阅stackoverflow.com/questions/3441839/jqgrid-reload-not-working/…
    • 谢谢 Oleg,你知道为什么设置 loadonce:false 会禁用分页吗?使用 loadonce:true 我得到 3 页数据(每页 20 个项目),但使用 loadonce:false 我只得到一页 20 个项目(尽管如果我选择每页显示更多项目,我可以看到它们)。
    • @rg88:如果您不使用loadonce:false,您的服务器应用程序应该返回只有一页的数据:对应page输入参数的页面,排序参数sidx和排序方向sord。所以你至少要在服务端实现数据的排序和分页。
    猜你喜欢
    • 2019-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-15
    相关资源
    最近更新 更多