如何在Rails中执行控制器返回的javascript?

时间:2012-02-01 06:11:32

标签: javascript jquery ruby-on-rails ajax

我想上传图片并在不刷新的情况下显示图片。

我知道的方法是使用隐藏的iframe并将表单的目标设置为它。

然后从控制器调用“parent.func()”返回一段javascript来做某事......

但这是我的问题:

似乎除非前台知道dataType是“script”,否则不会执行javascript,如:

$.ajax {
    dataType:"script"
}

但提交表格时,我必须使用

$("...").submit()

所以我无法指定dataType ....

谁能告诉我该怎么做?...

或者你能告诉我另一种实现目标的方法:

上传图片并在Rails 3.2.0中不刷新显示它。

3 个答案:

答案 0 :(得分:0)

尝试使用remotipart gem:

http://github.com/JangoSteve/remotipart

答案 1 :(得分:0)

我这样做的方式是调用代码(调用$("...").submit())将侦听隐藏的iframe上的load事件,然后做出反应;而不是服务器返回自动运行的JavaScript。

在iframe加载事件中,如果要返回JSON,可以将响应转换为JavaScript对象:

// assuming you have a DOM element with a variable of "iframe"
var doc = iframe.contentDocument ? iframe.contentDocument : iframe.contentWindow.document;
var response = eval("(" + doc.body.innerHTML + ")");

或者,在您的情况下,如果响应只是图像,那么您的加载回调可能会将响应放入< div>或者您已在页面上创建的其他元素。

您可能需要查看以下插件: https://github.com/valums/ajax-upload

或者,如果您想利用HTML5功能,可以使用更高级的插件: https://github.com/valums/file-uploader

答案 2 :(得分:0)

我认为您问题的正确答案是使用以下代码

render :inline => '<script type="text/javascript">parent.callback(data)</script>'