레거시 MVC 5 웹 앱에서 장기 실행 액션에 대한 ajax 호출 버튼을 클릭 한 후 계속 탐색 할 수 있기를 원합니다.ajax 호출 후 다른 페이지를 탐색 할 수없는 이유는 무엇입니까?
(참고 : 조치가 void
반환 - 나는 응답에 관심이 아니다)
내가 작업이 완료 될 때까지 다른 요청을 드릴 수 없습니다 버튼을 클릭합니다. 편집
:
: 여기[HttpPost]
public async Task EmailReport()
{
// for testing - sleep for 10 seconds
await Task.Delay(TimeSpan.FromSeconds(10));
}
가 크롬 개발 도구의 스크린 샷이다
$('#EmailReport') //
.click(function() {
$.ajax({
type: "POST",
url: '/Home/EmailReport',
complete: function() {console.log("done")},
async: true
});
});
컨트롤러 : 여기는 아약스 코드
EmailReport
16,는 AJAX 호출이며, 하단에있는 두 개의 요청 나 다른 페이지로 이동하려고 - 당신이 첫 번째 요청을 볼 수 pending
되고 이후 요청은 cancelled
사람이 어떤 아이디어가 있습니까 얼마나 I 이 문제를 해결하거나 문제를 해결할 수 있습니까?
클라이언트에 집중하는 대신 서버를 살펴보십시오. 장기 실행 작업은 서버를 처리하는 동안 서버를 완전히 묶어 놓습니까? –
백그라운드에서 실행하고 HTTP 200 응답을 리턴 할 수있는 'EmailReport'조치로 스레드를 작성하십시오. 를 통해 응답을 기다리지 마십시오. AJAX. –
이전에 완료 될 때까지 IIS가 결과 요청을 처리하지 않는 로컬 시스템에서 발생합니다. –