我知道這個答案:How do I add a cancel button to my jqgrid?,我試圖實現類似的東西,雖然沒有一個按鈕來觸發取消。我有一個網頁加載頁面加載(搜索默認加載沒有條件),我希望能夠取消默認的空條件搜索時,用戶實際執行搜索條件。由於我不需要按鈕,因此我試圖簡化解決方案,只需跟蹤loadBeforeSend方法中的xhr請求,並在xhr加載網格時如果它不爲空就放棄xhr。代碼:自動取消jqgrid請求
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函數被觸發,並有一個錯誤(第三個參數)「中止」。我是否需要在loadBeforeSend方面做更多/不同的工作,就像在其他答案中做的那樣?
此外,奧列格在他的示例代碼myGrid[0].endReq();
中提到,我可以在文檔中找不到那個 - 該函數是否存在?
對不起,但我無法關注你。我不明白你的意思下的「我希望能夠取消該默認空標準搜索時,用戶實際執行搜索與標準」。哪個「默認空標準搜索」是你的意思?你使用'loadonce:true'。所以它只會被**完成一次**初始請求到服務器到'url:「<%= Page.Request.Path%>/ExecuteSearch」'。以後的所有搜索,排序和分頁都將在本地執行,並且無需向服務器發送Ajax請求。所以你不能取消任何Ajax請求,因爲沒有請求會被髮送更多。你的意思是什麼? – Oleg
通過調用document.ready函數中的「getGridData()」函數加載網格。該初始網格加載在搜索時沒有條件執行,返回所有記錄。向用戶提供縮小搜索範圍的輸入,並且可以填充這些輸入並單擊「搜索」按鈕,該搜索按鈕使用填充的搜索條件重新運行getGridData函數,卸載並重新生成網格。沒有搜索標準的初始執行是我希望在執行後續搜索時中止的那個。 –