如何禁用jqgrid本地缓存?

时间:2011-12-19 18:06:40

标签: jqgrid

有没有办法禁用jqgrid本地缓存??? 我有一个你构建一些过滤器的页面,基于这个参数我创建了jqgrid。

问题是jqgrid不会改变postdata参数!我的意思是,在第二,第三,第四等搜索中,结果总是等于第一个。 我的jqgrid默认值是:

jQuery.extend(jQuery.jgrid.defaults, {
        ajaxGridOptions: {
            contentType: 'application/json;',
            type: "POST",
            cache: false,
            beforeSend: function () {
                $(".loading").show(); 
            }
        },
        serializeGridData: function (postData) {
            return JSON.stringify(postData);
        },
        datatype: 'json',
        autowidth: true,
        height: '100%',
        rowNum: 10,
        rowList: [10, 20, 30],
        hidegrid: false,
        prmNames: {
            search: "isSearch",
            nd: null,
            rows: "numRows",
            page: "numPage",
            sort: "orderBy",
            order: "orderType"
        },
        viewrecords: true,
        gridComplete: function () {
            $(".loading").hide();
        },
        jsonReader: {
            root: function (obj) { return obj.d.rows; },
            page: function (obj) { return obj.d.page; },
            total: function (obj) { return obj.d.total; },
            records: function (obj) { return obj.d.rows.length; },
            repeatitems: false
        }
    });

jqGrid创建:

$myGrid.jqGrid({
      postData: { from: jQuery.parseDate(fromQueryString), to: jQuery.parseDate(toQueryString) },
      url: "/Search.aspx/Find",
      colNames: ['Test'],
      colModel: [
         { name: 'Test', index: 'Test', sortable: false, width: 40 }
      ],
      sortname: "Date",
      sortorder: "desc",
      jsonReader: { id: "ID" },
      pager: "pagerControl",
      caption: "Results"
 });

1 个答案:

答案 0 :(得分:1)

如果我理解正确,页面已经出现控件,可以构建一些控件,例如input#frominput#to<input>字段,其中ids“来自”和“到”),这些控件定义了间隔您可以将其与其他参数一起发送到服务器。

我认为您的代码看起来像

var $myGrid = $("#list"),
    fromQueryString = "",
    toQueryString = "",
    createGrid = function () {
        $myGrid.jqGrid({
            postData: {
                from: jQuery.parseDate(fromQueryString),
                to: jQuery.parseDate(toQueryString)
            },
            url: "/Search.aspx/Find",
            colNames: ['Test'],
            colModel: [
                { name: 'Test', index: 'Test', sortable: false, width: 40 }
            ],
            sortname: "Date",
            sortorder: "desc",
            jsonReader: { id: "ID" },
            pager: "pagerControl",
            caption: "Results"
        });
    },
    myRefresh = function () {
        var fromQueryString = $("#from").val(),
            toQueryString = $("#to").val();

        createGrid();
    };

$("#from").change(myRefresh);
$("#from").change(myRefresh);
createGrid();

问题是上面的代码错误createGrid仅在第一次创建网格,然后(在myRefresh内),在测试之后,网格$myGrid已经创建,它不会显示任何内容。您可以理解这一点,您可以想象网格的许多部分:标题,列标题,寻呼机等只能创建一次。下次需要重新加载网格主体的内容

刷新jqGrid的正确方法是调用.trigger("reloadGrid")而不是尝试创建网格乘法次数。可以将代码修改为以下

var $myGrid = $("#list"),
    fromQueryString = "",
    toQueryString = "",
    createGrid = function () {
        $myGrid.jqGrid({
            postData: {
                from: function () {
                    return jQuery.parseDate($("#from").val());
                },
                to: function () {
                    jQuery.parseDate($("#to").val());
                }
            },
            url: "/Search.aspx/Find",
            colNames: ['Test'],
            colModel: [
                { name: 'Test', index: 'Test', sortable: false, width: 40 }
            ],
            sortname: "Date",
            sortorder: "desc",
            jsonReader: { id: "ID" },
            pager: "pagerControl",
            caption: "Results"
        });
    },
    myRefresh = function () {
        $myGrid.trigger("reloadGrid", [{page: 1}]);
    };

$("#from").change(myRefresh);
$("#from").change(myRefresh);
createGrid();

如果在每次网格重新加载时都会调用from的方法topostData。例如,如果用户单击列标题以更改网格排序,或者用户选择显示网格的另一页面。您可以阅读here有关该方法的更多信息。

唯一可以改变的是serializeGridData的代码,它应该测试postData的属性并在需要时调用该函数。有关详细信息,请参阅here