Rails:通过AJAX调用渲染js.erb

nul*_*ull 9 ajax ruby-on-rails

从JavaScript,我通过AJAX调用控制器,如下所示:

$.ajax({
  type: 'GET',
  url: '/books'
}
Run Code Online (Sandbox Code Playgroud)

在我的控制器中我有:

def index
  render 'lightbox.js.erb'
end
Run Code Online (Sandbox Code Playgroud)

在我的路线中,我有:

resources :books do
  member do
    get :lightbox
  end
end
Run Code Online (Sandbox Code Playgroud)

在lighbox.js.erb我有:

alert("Hello world!");
Run Code Online (Sandbox Code Playgroud)

出于某种原因,警报永远不会被调用.我没有收到任何错误消息,无论是通过服务器还是通过Firebug.我不知道可能出现什么问题.有任何想法吗?

nul*_*ull 23

事实证明,在客户端,我的JavaScript被呈现为文本.我通过查看控制台Feed确认了这一点.它说:

Started GET "/books/lightbox?book=4&username=tbaron&_=1344009191129" for 127.0.0.1 at 2012-08-03 10:53:11 -0500
Processing by BooksController#lightbox as text
Run Code Online (Sandbox Code Playgroud)

最后两个单词应该读作"JS".经过根深蒂固,我发现这个博客文章导致了一个非常简单的解决方案.将"dataType:script"添加到AJAX调用:

$.ajax({
  type: 'GET',
  url: '/books'
  dataType : 'script'
}
Run Code Online (Sandbox Code Playgroud)

谢谢大家的帮助!


Ant*_*rto 7

我想那是因为你需要打电话books.js:

$.ajax({
  type: 'GET',
  url: '/books.js',
  success: function(data) {
    eval(data);
  }
}
Run Code Online (Sandbox Code Playgroud)

在索引操作中:

def index
  respond_to do |format|
    format.js { render 'lightbox'}
  end
end
Run Code Online (Sandbox Code Playgroud)

lightbox.js.erb应该在应用程序/视图/书籍

如果它仍然无效,请尝试调用books/index.js 您还可以使用firebug/chrome来检查服务器响应您的ajax调用的内容