views:

670

answers:

1

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.

A: 

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"
makevoid
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.
asoules
Well. turns out I forgot dataType : 'script' in my ajax call. Thanks for your help, wouldn't have caught that one on my own.
asoules