【发布时间】:2012-11-26 19:08:59
【问题描述】:
我知道这个答案:How do I add a cancel button to my jqgrid?,我正在尝试实现类似的东西,尽管没有按钮来触发取消。我有一个在页面加载时加载的网格(默认情况下加载没有条件的搜索),我希望能够在用户实际执行带有条件的搜索时取消默认的空条件搜索。由于我不需要按钮,因此我试图通过仅跟踪 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(); 中提到,我在文档中找不到任何提及 - 该功能是否存在?
【问题讨论】:
-
对不起,我不能关注你。我不明白您在“我希望能够在用户实际执行带有条件的搜索时取消默认的空条件搜索”下的意思。您的意思是哪个“默认空标准搜索”?你使用
loadonce: true。所以它会只进行一次 向服务器发送初始请求到url: "<%= Page.Request.Path %>/ExecuteSearch"。之后的所有搜索、排序和分页都将在本地实现,而无需向服务器发出 Ajax 请求。因此,您不能取消任何 Ajax 请求,因为不会发送更多请求。你的意思是什么场景? -
通过调用document.ready函数中的“getGridData()”函数加载网格。此初始网格加载在没有搜索条件的情况下执行,返回所有记录。向用户提供输入以缩小搜索范围,他们可以填充这些输入并单击“搜索”按钮,该按钮使用填充的搜索条件重新运行 getGridData 函数,卸载并重新生成网格。没有搜索条件的初始执行是我希望在执行后续搜索时中止的执行。