新手问题 rails respond_to 的问题

luliangshu · 2014年04月23日 · 最后由 luliangshu 回复于 2014年04月24日 · 3023 次阅读

我有一个表单 在正常情况下 remote 时使用如下代码 可以响应到 js

def create
  respond_to do |format|
    format.js
  end
end

但是现在 我在表单中有上传图片功能。所以我使用了 iframe 这时候当我使用时 就不会响应到 js。报下面的错误 ActionController::UnknownFormat (ActionController::UnknownFormat): 请问该怎么解决

难道不是 json?

@pynix 一样 貌似我测试只有返回 html 才能正确响应。。

你要设置对应的请求头才行,比如curl --header "Accept: application/javascript" url这样 rails 才能知道你要的格式是 javascript

@kayakjiang 我更新了问题。应该是 iframe 导致的

#4 楼 @luliangshu 这个和是否使用了 iframe 没有关系,使用 iframe 的目的是为了在 form 表单提交后,把 form 表单的 target 属性指向 iframe,这样避免了页面刷新,看起来像 ajax,其实还是普通的 form 表单提交。而你要使用 form 表单上传文件,这又必须依赖普通的 form 表单提交。浏览器不支持 form 的 accept 属性,所以你应该别用 format.js 了,用默认的 format.html 就行了

@kayakjiang 是的。就是你描述的这个方案,多谢解释这么多让我明白了。主要是我想在上传成功后 返回消息。让前台显示 您已上传成功这种。使用 html5 的话 api 的 可以利用 ajax 发送 FormData 这个到还好说。但是对于 IE 低版本使用表单提交的方式,没法调用 js 的话 我这边如何得到 success 如何返回消息?点击后,或者 submit 后,隔 500 毫秒发一个请求过去检查?这样是否可行

#6 楼 @luliangshu 提交成功后,rails 返回的内容会跑到 iframe 中,你用 js 从 iframe 中把你需要的内容拿出来放到前台显示出来就可以了。

@kayakjiang 我如何得到通知让 js 去拿。是在前端开一个 setInterval 一直检查 iframe?如果有值就取出来显示 这个方法么

#8 楼 @luliangshu 应该不用开 setInterval,iframe 有个 load 事件,你试试监听这个事件就行了

$('#my-iframe').load(fucntion(){
   // 在这里获取你要的内容
})

@kayakjiang 已经测试成功。非常感谢!!!

需要 登录 后方可回复, 如果你还没有账号请 注册新账号