10

I'm trying to use jQuery, and everything has been great, until now, when I'm trying to render a partial and append it to a div. Here is how I have it set up:

I have an action that responds to js:

def index
  @objects = Object.find(:all)

  respond_to do |format|
    format.js
  end
end

And a template called index.js.erb with some javascript in it:

alert("hello world");

Firebug returns a "text/javascript" response containing:

alert("hello world");

But the alert window does not appear, nor does any other JavaScript work. I checked out http://railscasts.com/episodes/136-jquery And am more or less following along. I tried several other things, like using .rjs instead of .erb and putting this in my template:

page.alert("hello world"); 

but I get the same exact result, and the browser never executes the JS.

Anyone know why the JavaScript isn't being executed?

I'm running Rails 2.3.4.

1
  • 1
    You don't appear to be using anything jQuery specific, but just as a note, Rails ships with Prototype, not jQuery. Check out jRails if you want to switch. Commented Jan 6, 2010 at 21:29

1 Answer 1

12

You have to call it from your view or it will never be executed.

an example controller:

def index
  @objects = Object.find(:all)

  respond_to do |format|
    format.js{
      render :text => "alert('hello')"
    }
  end
end

and an index.html.erb with:

<script type="text/javascript">
  $(function(){
    $.ajax({ url: '/controller', type: 'get', dataType:'script' });
  });
</script>

replace '/controller' with the actual url that executes that controller's index action, by default for PostsController it will be '/posts' and so on...

if you like rjs you delete the {} and everithing in it in the controller and create an index.js.erb or index.rjs with:

page.alert("hello world")

or:

page << "hello world"
Sign up to request clarification or add additional context in comments.

3 Comments

I my situation, I don't have an html version of this action, its strictly for loading pages via ajax (endless pagination). For some reason, even when I call render :text => "alert('hello');" in my respond_to block, I still don't get alerted, but firebug says I'm getting a text/javascript response with the correct content.
Well. turns out I forgot dataType : 'script' in my ajax call. Thanks for your help, wouldn't have caught that one on my own.
dataType: 'script' also saved me when using the jQuery Form Plugin. Once you get the js.erb set up correctly, it still won't run as JavaScript without it. Thanks!

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.