В общем $.ajax
запрос возвращается XMLHttpRequest
объект имеющий abort
способ. Таким образом, если соответствующий вызов $.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()
. Я думаю, что новый метод, например, abortAjaxRequest
в jqGrid, может быть лучшим решением.
без изменения текущего исходного кода 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 , Я должен упомянуть, что я еще не тестировал код выше, но я надеюсь, что он должен работать.
Вы должны понимать, что приведенный выше код прерывает только ожидание браузера на стороне клиента, и процесс на сервере будет продолжен. Если ваш сервер будет выполнять прерывание на стороне сервера, то код выше не понадобится, и вы сможете напрямую вызвать этот метод прерывания сервера.
Это будет больше, чем «немного взломать». Самая большая проблема - это отмена запроса на сервер. Если вам удастся определить, будет ли запрос проходить долгое время, возможно, вам удастся предотвратить длительный запрос. В любом случае, это большая работа, даже если отмена запроса возможна. – Gregg