Triggering Javascript from a Ruby form

2 views
Skip to first unread message

A. Leek

unread,
Sep 3, 2010, 8:14:39 PM9/3/10
to rubyonra...@googlegroups.com
Hello again,

I've managed to hack together an uploader, but I need a progress bar to
go with it. I ended up using FTP to upload, and got a way to find the
progress while it's uploading. I split that off into another function in
the controller, which is all well and good.

The problem is that I need to repeatedly call the how_finished function
while the file is uploading. The form goes to the uploading function, so
I need another way to repeatedly call how_finished. The best way seems
to be with Javascript and AJAX, but I can't find a good way of setting
up and calling a Javascript function to get the information from the
controller. Looking at other Ruby progress bars
(http://railsillustrated.com/screencast-file-uploads-progress-in-rails-passenger.html)
it seems to be possible to call the controller with Javascript, but that
also requires a separate module for Apache that doesn't work for FTP
uploads. I've been looking around at JSON, but I don't really understand
it or how to use it to do what I want.

I'm pretty sure I have all the information I need in the program, the
problem is getting it all together and I'm not sure if that's even
possible. Does anyone have ideas?
--
Posted via http://www.ruby-forum.com/.

pepe

unread,
Sep 4, 2010, 9:09:51 AM9/4/10
to Ruby on Rails: Talk
I think one of the things you might need is a 'timer', which will let
your code 'sleep' before calling again your 'how_finished' function. I
have never done this but remember reading about it, I googled for
'javascript sleep timer' and one of the links I found was this:
http://www.daniweb.com/forums/thread47199.html

In order to communicate with the server from Javascript I would look
into Prototype or jQuery. They simplify enormously the code in
Javascript to be able to communicate with your server using AJAX.

I hope this gets you started.

On Sep 3, 8:14 pm, "A. Leek" <li...@ruby-forum.com> wrote:
> Hello again,
>
> I've managed to hack together an uploader, but I need  a progress bar to
> go with it. I ended up using FTP to upload, and got a way to find the
> progress while it's uploading. I split that off into another function in
> the controller, which is all well and good.
>
> The problem is that I need to repeatedly call the how_finished function
> while the file is uploading. The form goes to the uploading function, so
> I need another way to repeatedly call how_finished. The best way seems
> to be with Javascript and AJAX, but I can't find a good way of setting
> up and calling a Javascript function to get the information from the
> controller. Looking at other Ruby progress bars
> (http://railsillustrated.com/screencast-file-uploads-progress-in-rails...)

Parker Selbert

unread,
Sep 5, 2010, 3:12:25 PM9/5/10
to rubyonra...@googlegroups.com
A. Leek wrote:
> I'm pretty sure I have all the information I need in the program, the
> problem is getting it all together and I'm not sure if that's even
> possible. Does anyone have ideas?

It may be too narrowly supported for what your trying, but you can go to
the HTML5 route. Check out the File API:
http://dev.w3.org/2006/webapi/FileAPI/, which shows the new javascript
events that get fired when you do an upload. You can tie into the
following and perform actions all on the client side:

onloadstart
onprogress
onabort
onerror
onload
onloadend

If you need a more legacy (well, meaning it will support IE) solution
you can look at SWFUpload. It has similar events, but uses Flash and
Javascript to handle files and events.

http://swfupload.org/

Parker Selbert

unread,
Sep 6, 2010, 11:09:11 AM9/6/10
to rubyonra...@googlegroups.com
pepe wrote:
> I think one of the things you might need is a 'timer', which will let
> your code 'sleep' before calling again your 'how_finished' function. I
> have never done this but remember reading about it, I googled for
> 'javascript sleep timer' and one of the links I found was this:
> http://www.daniweb.com/forums/thread47199.html

Be it that he is using Rails he is certainly using Prototype, or perhaps
jQuery, already.

I have to disagree with the use of a timer (setInterval) in this
context, considering the hugely evented nature of Javascript and what
already exists out there.

Reply all
Reply to author
Forward
0 new messages