2008-09-23 5 views
4

Ruby on Rails 애플리케이션에서 파일을 업로드 한 다음 처리하고 싶습니다. 파일 업로드는 대개 매우 짧지 만 서버 측 처리에는 다소 시간이 걸릴 수 있으므로 (20 초 이상) 사용자에게 몇 가지 표시기를 제공하고자합니다. 이는 의미없는 '처리 중 ...'화면보다 좋습니다. 업데이트 매개 변수 I는 5 초마다 레일스 애플리케이션에서 서버 측 프로세스 업데이트하기

를 실행하려면 자바 스크립트를하고 다음 코드에 있습니다

내가보기

<%= periodically_call_remote(:url => {:action => 'progress_monitor', :controller => 'files'}, 
       :frequency => '5', 
       :update => "setProgress('progressBar','5')" 
       ) %> 

의 내용에 다음 코드를 사용하려고 해요 파일 제어기

def progress_monitor 
    render :text => 'whatever' 
end 

결국 progress_monitor 방법은 정수 (% 전체)로서 현재 진행 상태를 반환하고 그것은 '가 setProgress'로 전달 될 자바 스크립트 코드 (화면 요소를 업데이트합니다)

그러나 나는 자바 스크립트로 전달 될 수있는 서버로부터 올바른 응답을 얻으려고 애 쓰고 있습니다.

누구든지 도움을 줄 수 있습니까? 아니면 내가 잘못 접근하고 있습니까?

이 질문에 대한 후속 질문이 있습니다.이 질문은 처음에 업데이트되었지만 업데이트는 새로운 질문 인 here을 보증 할만큼 충분히 다릅니다.

답변

2

periodic_call_remote()는 div를 업데이트합니다. 귀하의 자바 스크립트 함수를 호출하지 않습니다. 나는 자바 스크립트 전문가는 아니지만 문제를 해결하기 위해 자신의 xmlhttp 호출을 수행해야합니다. 내가 당신이라면, 프로토 타입의 아약스 요청

http://www.prototypejs.org/api/ajax/request

사용이 실제로 내가 만난 COS를하는 데 도움이주기적인 폴링을

http://www.elated.com/articles/javascript-timers-with-settimeout-and-setinterval/

희망을 자바 스크립트의에서는 setTimeout이나 setInterval을을 사용하십시오 동일한 prb =)

0

:update 옵션은 업데이트하려는 div 만 나열하고 평가할 자바 스크립트는 포함하지 않아야합니다.

레일즈 헬퍼는 여전히이 상황에 매우 적합하기 때문에 맞춤 JS를 작성할 필요가 없습니다. 돌아 왔을 때 JS를 실행하려면 RJS 템플릿을 렌더링하는 것이 가장 쉬운 방법입니다. 순수한 HTML로 작업하려면 간단히 화면을 렌더링하거나 진행 막대의 HTML로 render 메소드에서 직접 리턴하고 periodically_call_remote 메소드의 :update 옵션에 넣으십시오.