Page.replace_html problem


#1

Hi all,
I tried to use ajax in a simple eshop application, but the
page.replace_html fail in strange mode.

Controller code:

class mycontroller < ApplicationController

Some code

def login
# Check user existence in db

  # if the user exist replace the login form with the user menu'

class mycontroller < ApplicationController

Some code

def login
# Check user existence in db

  # if the user exist replace the login form with the user menu'
  if session[:user] != nil
      create_user_menu
  end

end

def create_user_menu
@user = session[:user]

  render :update do |page|
     page.replace_html "login", :partial => 'user_menu', :locals

=> { :user => @user }
page.visual_effect :highlight, “login”
end
end
end

Layout code:

<%= render :partial => 'login' %>

The partial _login.rhtml code:

<%= start_form_tag({:action => ‘login’}, {:name => ‘form_login’}) %>
<%= render :partial => ‘login_form’ %>


<%= link_to_function(“Login”, “document.form_login.submit()”)
%>

<%= end_form_tag %>

The partial _user_menu.rhtml contain only a simple html table.
When i click on “Login” link, the browser show a new page with
my_controller/login action and the code generted by the js helper,
instead the correct user menu in the page my_controller.
Where is the error?

Thanks in advance, Emiliano.


#2

do you have this line somewhere in your layout header ?

<%= javascript_include_tag :defaults %>

fo the ajax stuff you need prototype and its friends


#3

You use a normal form to send the login form’s content. this launched
a full request cycle and results in a complete page being loaded.
so the browser expects your server to return a complete page, while
your server only returns a bit of javascript and the partial, which
should of course only be done when the request was an AJAX request.

You have to use remote_form_for or form_remote_tag to send the form
data via AJAX.See the API for Documentation.
http://api.rubyonrails.org/classes/ActionView/Helpers/PrototypeHelper.html#M000529
http://api.rubyonrails.org/classes/ActionView/Helpers/PrototypeHelper.html#M000530


#4

ha scritto:

Yes! This is the solution.

Many thanks.