自动取消jqgrid请求



我知道这个答案:如何在jqgrid中添加取消按钮?,我正在尝试实现类似的东西,尽管没有触发取消的按钮。Iv'e得到了一个在页面加载时加载的网格(默认情况下加载时没有条件),我希望当用户实际执行有条件的搜索时,能够取消默认的空条件搜索。由于我不需要按钮,我试图简化解决方案,只需在loadBeforeSend方法中跟踪xhr请求,并在加载网格时,如果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函数被触发,错误(第三个参数)为"abort"。我需要像其他答案中那样对loadBeforeSend做更多/不同的事情吗?

此外,Oleg在他的示例代码myGrid[0].endReq();中提到了这一点,我在文档中找不到这一点——这个函数存在吗?

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

datatype: "json",

类似

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

换句话说,在搜索条件为空的情况下,应该使用datatype: "local"而不是datatype: "json"创建网格。网格将保持为空。

此外,如果colDefinitionscolHeaders对于不同的搜索条件保持不变,则应考虑只创建一次jqGrid。您可以只更改postData并调用trigger("reloadGrid"),而不是重新创建网格。

最新更新