Jquery 使用Rails、主干网和Remotipart上传AJAX图像

Jquery 使用Rails、主干网和Remotipart上传AJAX图像,jquery,ruby-on-rails,ajax,backbone.js,remotipart,Jquery,Ruby On Rails,Ajax,Backbone.js,Remotipart,我已经使用Remotipart成功地通过AJAX上传了一段时间的图像,但我们最近决定采用主干路线,现在由于我的表单是通过JS模板呈现的,我不再能够使用:remote=>true语法来生成Iframe传输代码。我不想弄明白如何手动执行此操作。关于使用JS模板时如何让Remotipart正常工作,您有什么想法吗?想出了一个解决方案。我对JS for RemotipPart的工作原理有点困惑。经过一番研究,我发现: Remotipart只需绑定到ajax:aborted:file事件,当jQueryU

我已经使用Remotipart成功地通过AJAX上传了一段时间的图像,但我们最近决定采用主干路线,现在由于我的表单是通过JS模板呈现的,我不再能够使用:remote=>true语法来生成Iframe传输代码。我不想弄明白如何手动执行此操作。关于使用JS模板时如何让Remotipart正常工作,您有什么想法吗?

想出了一个解决方案。我对JS for RemotipPart的工作原理有点困惑。经过一番研究,我发现:

Remotipart只需绑定到ajax:aborted:file事件,当jQueryUJS(处理传统ajax表单提交)检测到表单中的文件时,就会触发该事件。由于该脚本(以及依赖的iFrame传输插件)已经包含在页面中,因此您只需手动添加

data-remote="true"
以你的形式。jQuery有一个绑定到具有此类属性的表单的.on()事件,因此如果包含该事件,将触发Remotipart

不过,另一个问题是,如果提交此表单,由于缺少CSRF令牌,它仍可能无法上载文件。解决方案是手动添加带有标记的隐藏输入标记

下面是对我有用的最后一个标记(我使用.eco模板和一个小jQuery来获取页面上CSRF元标记的值):


拯救
希望这将有助于其他人免去我曾经遇到的麻烦

<form accept-charset="UTF-8" id="image-upload-form" action="/projects/<%= @project.get('id') %>" method="post" enctype="multipart/form-data" data-remote="true">
    <input name="project[cover_photo]" type="file" />
    <input type="hidden" name="<%= $('meta[name="csrf-param"]').attr('content') %>" value="<%= $('meta[name="csrf-token"]').attr('content') %>" />
    <input name="_method" type="hidden" value="put" />
    <button id="add-photo">Save</button>
</form>