一般$.ajax 请求返回具有abort 方法的XMLHttpRequest 对象。因此,如果$.ajax 的相应调用将具有以下形式
var lastXhr = $.ajax ({
// parameters
success:function(data,st) {
// do something
lastXhr = null;
},
error:function(xhr,st,err){
// do something
lastXhr = null;
}
});
我们将可以访问lastXhr 有价值的信息,然后我们就可以致电lastXhr.abort()。我认为在 jqGrid 中像abortAjaxRequest 这样的新方法可能是最好的解决方案。
在不改变 jqGrid 的当前源代码的情况下,解决方案可能如下所示
var lastXhr;
var stopAjaxRequest(myGrid) {
$('#cancel').attr('disabled', true); // disable "Cancel" button
lastXhr = null;
myGrid[0].endReq();
};
var grid = $("#list");
grid.jqGrid ({
// all standard options
loadComplete() {
stopAjaxRequest(grid);
},
loadError() {
stopAjaxRequest(grid);
},
loadBeforeSend (xhr) {
l$('#cancel').attr('disabled', false); // enable "Cancel" button
lastXhr = xhr;
}
});
$("#cancel").click(function() {
if (lastXhr) {
lastXhr.abort();
}
});
我想在代码中,我们在 jqGrid 之外有一个 id="cancel" 的“取消”按钮。我应该提一下,我还没有测试上面的代码,但我希望它应该可以工作。
您应该明白,上面的代码只是中止了客户端浏览器的等待,而服务器上的进程将继续进行。如果你的服务器要实现服务端aborting,那么上面的代码就不需要了,你可以直接调用这个server aborting方法。