在我的控制器中,我试图渲染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])之前我应该看到一个警告框,但我看到了一个下载框。可能是什么问题?
答案 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文件。