2013-02-21 6 views
0

John Culviner (위대한) jquery.fileDownload 플러그인을 사용하고 있습니다. 다운로드가 완료되면 콜백을하지만 내 파일을 생성하는 데 약 30 초가 걸립니다 (많은 백엔드 처리).jquery.fileDownload : 진행 상황을 사용자에게 알리기

사용자에게 현재 진행 상황을 알리고 싶습니다. 프로토 타입으로

, 내가 이것을 시도하고있다 :

1) (파일 다운로드가 시작되기 전에) - 반복적으로 URL을 폴링 매초마다 ($ 갔지 (...)). % 완료를 반환하고 페이지에서 div를 업데이트합니다 (이 시점에서 0 %).

2) fileDownload 스크립트를 시작합니다 (이 시점에서 1이 확인하는 서버 측 변수). 2 % 완료 .... 10 % 완료 .... 기타 등

3) 이상적으로 파일이 빌드되는 동안, 내 Ajax 호출은 1) 여전히 폴링 (및 div 업데이트)을하므로 사용자가 진행 상황을보기 시작합니다.

4) 다운로드가 완료됩니다. 나는 그것이 100 %를 보여줄 것이기 때문에이 시점에서 '진도 div'를 숨길 수 있습니다.

NB 진행률 div는 결국 진행률 막대로 바뀝니다.

문제는 fileDownload가 시작되자 마자 ajax가 1) 대기열에 들어가기 시작하고 4) 후에야 실행됩니다.

fileDownload 플러그인이 내 메인 페이지에서 ajax 호출을 차단할 것이라고 생각하지 않은 iframe을 사용한다고 생각하지만 그렇게 보입니다.

희망이 있습니다. 이 문제를 해결하는 방법에 대한 조언을 주신 분께 감사드립니다.

답변

0

ASP.NET MVC 웹 응용 프로그램에서 동일한 문제가 발생했습니다. 제 경우에는 동일한 세션을 사용하는 두 개의 요청을 동시에 실행할 수 없으므로 문제는 서버와 관련이 있습니다. 세션은 ASP.NET에서 스레드로부터 안전하지 않습니다.

MVC 프로젝트의 솔루션은 컨트롤러를 [SessionState(SessionStateBehavior.ReadOnly)] 속성으로 꾸미는 것입니다. 두 작업간에 변수를 공유하려면 세션 대신 스레드 안전 Cache을 사용하십시오.

+0

이 구성 요소와 ASP.NET MVC5에서 같은 문제가 발생합니다. 그 SessionStateAttribute 내 "진행"작업을 포함하는 컨트롤러를 장식하지만 내 진행 작업에 대한 호출은 파일 다운로드가 끝날 때까지 여전히 차단되었습니다. 같은 속성을 가진 두 컨트롤러를 모두 꾸밀 필요가 있습니까? 힘든 일입니다. –

관련 문제