【发布时间】:2014-07-07 12:22:36
【问题描述】:
是否可以在backbone.js 中将contentType="application/json" 覆盖为contentType="multipart/form-data"?
有没有上传骨干文件的例子?
【问题讨论】:
标签: backbone.js marionette backbone-views backbone-events
是否可以在backbone.js 中将contentType="application/json" 覆盖为contentType="multipart/form-data"?
有没有上传骨干文件的例子?
【问题讨论】:
标签: backbone.js marionette backbone-views backbone-events
不,您不能在 html 表单之外进行文件上传。人们通常做的是有一个隐藏的 iframe,它托管一个表单来进行上传,然后让他们的主 html 页面与该 iframe 通信,这样表单发布就不会干扰您原本无缝的 SPA UX。这不是特定于骨干网的问题。
【讨论】:
有几个“陷阱”。
对于 FormData() 类型的上传,您不能手动将 ContentType 设置为“multipart/form-data”。
您必须在调用 save() 时将数据对象传递给 options 参数。
这是因为 ContentType 添加了一些属性,例如boundary,浏览器必须处理和添加。详情请见this stackoverflow。
var formData = new FormData($('#form-id')[0]);
model.save(null, { // No need to set data parameter here.
data: formData, // Must put data here.
processData: false, // Don't let Backbone process the data.
contentType: false, // Don't let Backbone set content-type.
success: function() {}
});
这将导致浏览器将 ContentType 标头设置为适当的 'multipart/form-data; ....' 参数。
【讨论】:
这是可能的。您将 contentType 选项传递给 save 方法,以及您想要放入其中的任何数据:
var model = new Backbone.Model();
model.save({
contentType: 'multipart/form-data',
data: /* Your data */
});
您可以在 Backbone 源代码here 中看到这一点。
【讨论】: