在Ruby中渲染vanilla JavaScript的问题

时间:2010-10-20 11:37:54

标签: javascript ruby-on-rails rendering

在我的控制器中,我试图渲染vanilla JavaScript但是得到了意想不到的结果。这是代码

class UploadController < ApplicationController

    def index

        render :file => 'app\views\upload\uploadfile.rhtml'

    end

    def uploadFile

        render :js => "alert('Hello Rails');"

       post = DataFile.save(params[:upload])

    end

end

我期待在执行post = DataFile.save(params [:upload])之前我应该​​看到一个警告框,但我看到了一个下载框。可能是什么问题?

1 个答案:

答案 0 :(得分:1)

render :js将发送MIME类型为text/javascript的数据 浏览器会看到并试图下载或显示它(我的浏览器,Chromium,将.js文件显示为纯文本。)

render :js实际上是为了返回一些将由该页面上的代码处理的JavaScript。

实质上,您可以从jQuery进行AJAX调用:

$.ajax({
  type: "POST",
  url: "tokens/1/destroy.js",
  data: { _method: 'DELETE', cell: dsrc.id }
});

这是从我的一个项目中获取的一些代码。这里没有定义dataType,因此jQuery智能地“猜测”返回了什么类型的数据。它看到它是MIME类型:text/javascript并执行它。如果我们使用您的代码,将导致显示警告对话框。

实际上,您需要已经加载了一个页面,并且该页面必须等待返回“vanilla JavaScript”。

如果您只想为该特定操作执行某些代码,则只需在模板/视图中使用javascript_tag包装它,或者包含外部.js文件。