自动取消jqgrid请求

时间:2012-11-26 19:09:00

标签: ajax jqgrid

我知道这个答案:How do I add a cancel button to my jqgrid?,我试图实现类似的东西,尽管没有触发取消的按钮。我有一个加载页面加载的网格(默认加载没有标准的搜索),我希望能够在用户实际执行带有条件的搜索时取消默认的空标准搜索。因为我不需要按钮,所以我只是想在loadBeforeSend方法中跟踪xhr请求来简化解决方案,如果在加载网格时它不为null,则中止xhr。代码:

var gridXhr;
function getGridData() {
    var searchParms = ...;
    var colHeaders = [...];
    var colDefinitions = [...];
    if (gridXhr != null) {
        alert(gridXhr.readyState);
        gridXhr.abort();
        gridXhr = null;
    }
    $('#grid').jqGrid('GridUnload');
    $('#grid').jqGrid({
        defaults: {...},
        autowidth:true,
        url: "<%= Page.Request.Path %>/ExecuteSearch",
        mtype: 'POST',
        ajaxGridOptions: { contentType: "application/json" },
        postData: searchParms,
        datatype: "json",
        prmNames: {
            nd: null,
            rows: null,
            page: null,
            sort: null,
            order: null
        },
        jsonReader: {
            root: function (obj) { return obj.d; },
            page: function (obj) { return 1; },
            total: function (obj) { return (obj.d.length / 20); },
            records: function (obj) { return obj.d.length; },
            id: 'CatalogID',
            cell: '',
            repeatitems: false
        },
        loadonce: true,
        colNames: colHeaders,
        colModel: colDefinitions,
        caption: "Search Results",
        pager: 'searchPaging',
        viewrecords: true,
        loadBeforeSend: function (xhr) {
            gridXhr = xhr;
        },
        loadError: function (xhr, status, error) {
            gridXhr = null;
            if (error != 'abort') {
                alert("Load Error:" + status + "\n" + error);
            }
        },
        loadComplete: function() {
            gridXhr = null;
        },
        multiselect: <%= this.MultiSelect.ToString().ToLower() %>,
        multiboxonly: true
    }).setGridWidth(popWidth);
}

我遇到的问题是jqGrid的后续执行不起作用。触发loadError函数,错误(第3个参数)为“abort”。我是否需要使用loadBeforeSend做更多/不同的事情,如在另一个答案中所做的那样?

此外,Oleg在他的示例代码myGrid[0].endReq();中提到过,我在文档中没有提到这一点 - 该函数是否存在?

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您只需更改行

即可
datatype: "json",

类似

datatype: isSearchParamEmpty(searchParms) ? "local" : "json",

换句话说,如果搜索条件为空,则应使用datatype: "local"而不是datatype: "json"创建网格。网格将保持空白。

此外,如果colDefinitions colHeaderspostData对于不同的搜索条件保持不变,则应考虑仅创建一次 。您无需重新创建网格,只需更改trigger("reloadGrid")并调用{{1}}。