javascript – jQuery Remotipart将[object Object]发送到服务器
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – jQuery Remotipart将[object Object]发送到服务器,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2068字,纯文字阅读大概需要3分钟。
内容图文
![javascript – jQuery Remotipart将[object Object]发送到服务器](/upload/InfoBanner/zyjiaocheng/722/82cf0502e4e449f2b60eb7f43b21ea75.jpg)
我正在尝试使用ajax将文件上传到我的Rails应用程序.为方便起见,我已经包含了jQuery.remotipart gem.
// app/assets/javascripts/application.js
//= require jquery.remotipart
我有一个上传文件的表格.这些文件由CarrierWave处理.
<%= form_for @import, remote: true do |f| %>
<fieldset>
<%= f.label :file, "Attach a CSV file" %>
<%= f.file_field :file %>
</fieldset>
<%= f.submit :upload %>
<% end -%>
不幸的是,当我提交附有文件的表单时,它似乎没有正确地到达我的控制器操作. params hash将JS对象字符串化为键.
Started POST "/file_imports" for 127.0.0.1 at 2012-11-06 01:00:49 +0000
Processing by FileImportsController#create as JS
Parameters: {"object Object"=>{","=>{"object Object"=>{","=>{"object Object"=>nil}}}}}`
在Chrome的开发工具中,我可以看到这确实是发送到服务器的表单数据:
当我删除remote时,表单工作正常:true(当然,在这种情况下,它会发送HTML请求而不是JS请求).
任何人都知道我做错了什么?顺便说一下,我使用的是Rails 3.2.8和Remotipart 1.0.2(最新版).
编辑:做了一些挖掘.
看看Remotipart的来源,我似乎无法理解它应该做什么.例如,在vendor/assets/javascripts/jquery.remotipart.js中,第22行具有以下内容:
settings.data = form.serializeArray();
再向下,设置将通过$.rails.ajax(设置)发送到服务器.
$.fn.serializeArray()方法返回一个JS对象数组.如果我们将它们分配给jQuery.ajax()调用的data属性,那将解释我在服务器上看到的序列化对象参数.我们需要传递一个对象作为数据属性,而不是一个对象数组?
但是,当我尝试将数组展平为一个对象时,整个事情就会中断并且HTML请求被发送到服务器而不是JS服务器.我认为它与jQuery.ajax.processData == false的事实有关.
我有一个issue on the Remotipart Github.
解决方法:
经过大量的调试和阅读大量代码后,我终于获得了使用Rails 3.2.8的最新gem.我被三个陷阱钉了:
(1)我在表单提交之前禁用了我的文件输入字段,这导致remotipart忽略它以包含在iframe提交中.您必须确保已启用文件输入.这是您看到的错误的直接原因.
(2)在我的调试过程中,我使用最新的上游源覆盖了jquery.iframe-transport,并且它不支持iframe中的X-Http-Accepts隐藏变量.您必须使用与remotipart gem捆绑在一起的版本.
(3)如果您使用的是脚本以外的数据类型,请不要忘记为ajax连接回调:在表单上完成.如果未在全局ajax选项中指定dataType,或者在表单上使用data-type属性,则这是缺省值.
内容总结
以上是互联网集市为您收集整理的javascript – jQuery Remotipart将[object Object]发送到服务器全部内容,希望文章能够帮你解决javascript – jQuery Remotipart将[object Object]发送到服务器所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。