【问题标题】:How to execute a javascript returned by controller in Rails?如何在 Rails 中执行控制器返回的 javascript?
【发布时间】:2012-02-01 06:11:31
【问题描述】:

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

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

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

但这是我的问题:

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

$.ajax {
    dataType:"script"
}

但是当提交表单时,我必须使用

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

所以我不能指定数据类型....

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

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

在 Rails 3.2.0 中上传图像并在不刷新的情况下显示它..

【问题讨论】:

    标签: javascript jquery ruby-on-rails ajax


    【解决方案1】:

    尝试使用remotipart gem:

    http://github.com/JangoSteve/remotipart

    【讨论】:

      【解决方案2】:

      我这样做的方式是调用代码(调用$("...").submit())将监听隐藏iframe上的加载事件,然后做出反应;而不是服务器返回自动运行的 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 + ")");
      

      或者,在您的情况下,如果响应只是图像,那么您的加载回调可以将响应放入

      或您已经在页面上创建的其他元素中。

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

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

      【讨论】:

      • 非常感谢!..我会尝试你的建议!
      【解决方案3】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-12-20
        • 1970-01-01
        • 2017-07-08
        • 1970-01-01
        • 2017-10-20
        • 1970-01-01
        相关资源
        最近更新 更多