我有一个表单 在正常情况下 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
curl --header "Accept: application/javascript" url
@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 已经测试成功。非常感谢!!!