У меня есть действие AJAX, которое может занять пару минут, в зависимости от объема данных. Если пользователь получает разочарование и перемещается, пока это действие все еще работает, что происходит с контроллером? Все равно завершается? Знает ли он, что запрос должен быть оставлен и утилизировать объект контроллера?
Что происходит с контроллером ASP.NET MVC, когда пользователь перемещается до получения ответа?
Ответ 1
Он не отменяет запрос на сервер, поскольку действие навигации не отправляет на сервер информацию о данном запросе. Клиент (браузер), однако, перестанет его слушать. После завершения запроса, независимо от того, слушал ли клиент его или нет, контроллер будет распоряжаться, как обычно.
С учетом сказанного вы можете получить фантазию и использовать комбинацию прослушивания изменения страницы на стороне клиента и вызов abort
по запросу AJAX на сервер.
Этот вопрос SO обсуждает, как прервать запрос. Я мог бы представить настройку переменной при первом запуске запроса AJAX, а затем отключить ее, когда она закончится.
Предупреждение - псевдо-код ниже
var isProcessing = false;
var xhr = $.ajax({
type: "POST",
url: "myUrl",
beforeSend: function(){
isProcessing = true;
}
complete: function(){
isProcessing = false;
}
});
window.onbeforeunload = function(){
if(isProcessing){
xhr.abort();
}
}
Вышеприведенная концепция является основной идеей, но, вероятно, есть некоторые проверки, если объект xhr существует, возможно, также связывает/отвязывает window.onbeforeunload
в обработчиках beforeSend и complete для элемента .ajax()
.