0

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

1 Answer 1

1

I think your javascript file should be called change_network.js.erb and inside

$("#site_list_body").html('<%= escape_javascript(render 'shared/network_site_list') %>');
Sign up to request clarification or add additional context in comments.

2 Comments

Thanks for the suggestion. I'm afraid this doesn't work. The output is simply $("#site_list_body").html('<!--render output-->');
You are including the file defaults.js with this line <%= javascript_include_tag :defaults %>. Does that file include this //= require jquery and this //= require jquery_ujs?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.