I'm trying to get some basic ajax working on rails. I have a comon main page, with a banner, sidebar and main area. In the sidebar I have added a dropdown menu and button (clunky I know, but you have to start somehere) to change an attribute of the user's view of the site (the selected network). The idea is that when the network is changed, the AJAX functionality should change the list of sites reflecting the fact that the network has changed.
The problem is that when the AJAX code runs, I get the javascript appearing in my browser window, rather than updating the appropriate element
try {Element.update("site_list_body", "<-- the correct html appears here -->");} catch (e) { alert('RJS error:\n\n' + e.toString());
alert('Element.update(\"site_list_body\", \"<--same html code here too-->");'); throw e }
I've had a look round stackoverflow and google, and despite trying various suggestions, none of them seem to work at the moment. Any help would be appreciated :-)
Thanks
Steve
So (with simplifications) - my main page looks like this
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="content-type" content="text/html;charset=UTF-8" />
<title>Networks: <%= controller.action_name %></title>
<%= stylesheet_link_tag 'frontier', 'menus' %>
<%= javascript_include_tag :defaults %>
</head>
<body id="frontier-network">
<div id="banner"
<--banner and menu stuff -->
</div>
<div id="columns">
<div id="side">
<-- some other stuff -->
<div id="site_list_body">
<%= render :partial => "shared/network_site_list", :locals => {:site_list => @site_list} %>
</div>
<div>
<% form_for :user, :url=>{:controller=>'users', :action => :change_network} do |f| %>
<-- this is where the dropdown list etc goes -->
</div>
</div>
<div id="main">
<%= yield :layout%>
</div>
</div>
The javascript .rjs.js file contains page.replace_html("site_list_body", :partial => "shared/network_site_list", :locals => {:site_list => @site_list})
And the controller code is as follows:
def change_network
@user = User.find(session[:user_id])
new_network_id=params["user"]["current_network_id"]
@user.current_network_id=new_network_id.to_i
@site_list=Site.find_all_by_network_id(@user.current_network_id)
respond_to do |format|
format.js
end
end