2010-01-06 51 views
10

我试图使用jQuery,一切都很好,直到现在,当我试图渲染一个部分并将其附加到一个DIV。这是我如何把它设置了:Rails,jQuery,.js.erb文件,JS不是由浏览器执行

我有回应的行动,JS:

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

    respond_to do |format| 
    format.js 
    end 
end 

和被叫index.js.erb的有一些JavaScript在它的模板:

alert("hello world"); 

萤火虫返回一个包含“文/ JavaScript的”回应:

alert("hello world"); 

但警告窗口没有出现,也没有一个其他JavaScript工作。我检查出http://railscasts.com/episodes/136-jquery 并且我或多或少地跟随。我试过其他一些事情,如使用替代.erb .rjs并把这个在我的模板:

page.alert("hello world"); 

,但我得到了完全相同的结果,并且浏览器永远不会执行的JS。

任何人都知道为什么JavaScript没有被执行?

我正在运行Rails 2.3.4。

+1

你不出现任何使用jQuery的具体是,但只是作为一个说明,Rails的附带原型,而不是jQuery的。如果您想切换,请查看jRails。 – 2010-01-06 21:29:15

回答

12

您必须从您的视图中调用它,否则它将永远不会执行。

的示例控制器:

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

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

并用index.html.erb:

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

替换一种执行控制器的索引作用的实际URL '/控制器' 的,默认情况下PostsController它将'/ posts'等等......

如果你喜欢rjs,你可以在控制器中删除{}并且在其中创建一个按钮,然后创建一个index.js.erb或者index.rjs文件:

page.alert("hello world") 

或:

page << "hello world" 
+0

我的情况,我没有这个动作的html版本,它严格的通过ajax(无尽的分页)加载页面。 由于某种原因,即使我调用render:text =>“alert('hello');”在我的respond_to块,我仍然没有得到提醒,但萤火虫说我得到正确的内容的文本/ JavaScript响应。 – a10s 2010-01-06 21:49:19

+4

好吧。事实证明我忘记了dataType:'script'在我的ajax调用中。感谢您的帮助,不会因为我自己而陷入困境。 – a10s 2010-01-06 21:52:15

+0

dataType:'script'在使用jQuery表单插件时也保存了我。一旦你正确地设置了js.erb,它仍然不会像没有它的JavaScript那样运行。谢谢! – brokenbeatnik 2012-01-31 20:02:53

相关问题