【问题标题】:Overriding the contentType in backbone.js覆盖backbone.js中的contentType
【发布时间】:2014-07-07 12:22:36
【问题描述】:

是否可以在backbone.js 中将contentType="application/json" 覆盖为contentType="multipart/form-data"

有没有上传骨干文件的例子?

【问题讨论】:

    标签: backbone.js marionette backbone-views backbone-events


    【解决方案1】:

    不,您不能在 html 表单之外进行文件上传。人们通常做的是有一个隐藏的 iframe,它托管一个表单来进行上传,然后让他们的主 html 页面与该 iframe 通信,这样表单发布就不会干扰您原本无缝的 SPA UX。这不是特定于骨干网的问题。

    【讨论】:

    • 你能提供任何文件上传的例子吗?
    • 我推荐谷歌搜索“js 文件上传”。忽略主干元素。有很多文章和现有的库可以帮助您解决可能遇到的跨浏览器兼容性问题。
    【解决方案2】:

    是的,这是可能的。我自己用它来上传文件!

    有几个“陷阱”。

    1. 对于 FormData() 类型的上传,您不能手动将 ContentType 设置为“multipart/form-data”。

    2. 必须在调用 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; ....' 参数。

    【讨论】:

      【解决方案3】:

      这是可能的。您将 contentType 选项传递给 save 方法,以及您想要放入其中的任何数据:

      var model = new Backbone.Model();
      
      model.save({
         contentType: 'multipart/form-data',
         data: /* Your data */
      });
      

      您可以在 Backbone 源代码here 中看到这一点。

      【讨论】:

      • 想要覆盖 专门用于文件上传(multipart/form-data),其他情况应该是application/json而已。
      猜你喜欢
      • 2013-06-16
      • 1970-01-01
      • 2012-12-22
      • 2012-12-31
      • 2012-04-25
      • 2011-06-11
      • 2012-01-28
      • 2012-07-18
      • 1970-01-01
      相关资源
      最近更新 更多