5.7. Ajax
Be sure to include the JavaScript libraries in
the layout:
<%= javascript_include_tag :defaults %>
5.7.1. Linking to
Remote Action
<%= link_to_remote "link", :update => 'some_div',
:url => { :action => 'show', :id => post.id } %>
<%= link_to_remote "link", :url => { :action => 'create',
:update => { :success => 'good_div',
:failure => 'error_div' },
:loading => 'Element.show('spinner'),
:complete => 'Element.hide('spinner') } %>
5.7.2.
Callbacks
:loading
-
Called when the remote document is being loaded
with data by the browser.
:loaded
-
Called when the browser has finished loading the
remote document.
:interactive
-
Called when the user can interact with the
remote document, even though it has not finished loading.
:success
-
Called when the XMLHttpRequest is completed, and
the HTTP status code is in the 2XX range.
:failure
-
Called when the XMLHttpRequest is completed, and
the HTTP status code is not in the 2XX range.
:complete
-
Called when the XMLHttpRequest is complete
(fires after success/failure if they are present).
You can also specify reactions to return codes
directly:
link_to_remote word,
:url => { :action => "action" },
404 => "alert('Not found...? Wrong URL...?')",
:failure => "alert('HTTP Error ' + request.status + '!')"
5.7.3. Ajax
Forms
You can create a form that will submit via an
XMLHttpRequest instead of a POST request. The parameters are passed
exactly the same way (so the controller can use the params
method to access the parameters). Fallback for
non-JavaScript-enabled browsers can be specified by using the
:action methods in the :html option:
form_remote_tag :html => { :action => url_for(:controller => 'controller',
:action => 'action'),
:method => :post }
5.7.4.
Autocompleting Text Field
In the view t\emplate:
<%= text_field_with_auto_complete :model, :attribute %>
In the controller:
auto_complete_for :model, :attribute
5.7.5. Observe
Field
<label for="search">Search term:</label>
<%= text_field_tag :search %>
<%= observe_field(:search,
:frequency => 0.5,
:update => :results,
:url => { :action => :search }) %>
<div id="results"></div>
Optionally specify:
:on => :blur # trigger for event (default :changed or :clicked)
:with => ... # a JavaScript expression to specify what value is sent
# defaults to "value"
:with => 'bla' # "'bla' = value"
:with => 'a=b' # "a=b"
5.7.6. Observe
Form
Same semantics as observe_field.
5.7.7.
periodically_call_remote
<%= periodically_call_remote(:update => 'process-list',
:url => { :action => :ps },
:frequency => 2 ) %>
Learn more:
http://api.rubyonrails.com/classes/ActionView/Helpers/JavaScriptHelper.html.
|