В общем случае $.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();
}
});
ВКод, я полагаю, что у нас есть кнопка «Отмена» с id = «отмена» вне jqGrid.Я должен отметить, что я еще не тестировал приведенный выше код, но надеюсь, что он должен работать.
Вы должны понимать, разумеется, что приведенный выше код прерывает только ожидание браузера на стороне клиента.и процесс на сервере будет продолжен.Если на вашем сервере будет реализована прерывание на стороне сервера, приведенный выше код не понадобится, и вы сможете напрямую вызывать этот метод прерывания работы сервера.