jQuery文件上传POST数据附加问题

时间:2015-05-17 06:20:14

标签: javascript jquery ajax backbone.js

我在 Backbone 应用程序中使用jQuery文件上传器。

  

我在POST数据中遇到问题,即当我上传数据时,只有文件   选中的内容将添加到 POST对象和一个 id 中   在formData 中的 initializeFileUpload函数中初始化,并且此initializeFileUpload函数在 OnLoad

中加载

this.ui.uploadAppFile 是jquery对象

initializeFileUpload: function() {
                var that = this,
                    file = "";
                var options = {
                    url: FSGlobals.baseURL + 'requests/req_bu_files/file',
                    maxFileSize: 5000000, // 5MB
                    formData: {
                      "Id": that.requestHeaderMod.get("id"),
                     },
                    add: function(e, data) {
                        file = (data && data.files[0] && data.files[0].name) || "";
                        that.manualPostData = data;
                        that.ui.filePlaceholder.val(file).change();
                    }
                };

                if ($('html').hasClass('ie9') || $('html').hasClass('lt-ie9')) {
                    options.forceIframeTransport = true;
                } else {
                    options.dataType = 'json';
                }

                this.ui.uploadAppFile.fileupload(options);
            }

我有一个按钮提交,在提交时 我必须在帖子对象中再添加两个ID。

UploadAction: function() {
                var that = this;
                this.manualPostData.submit().
                done(function(data, textStatus, jqXHR) {

                    })
                    .fail(function(jqXHR, textStatus, errorThrown) {

                    });
               }

现在我尝试在 this.manualPostData 中找到formData,但我找不到 formData

  

提交后我在网络中看到它显示了带有file []和id的formData对象   initializeFileUpload

2 个答案:

答案 0 :(得分:0)

According to the documentation, you can use the method submit to add additional values to the request:

https://github.com/blueimp/jQuery-File-Upload/wiki/Options#submit

这是我创建的一个小提琴,用于演示如何覆盖该方法。

https://jsfiddle.net/LtzvL6s9/

submit: function(e, data) {
  console.log('submit',data, data.formData)
  data.formData = $.extend({}, {'other': 2}, data.formData);
}

我无法发送原始ID,然后在表单中附加其他数据,但您可以在提交方法中添加所需的所有内容。

希望这有助于解决您的问题。

答案 1 :(得分:0)

我找到了一个解决方案:

  

提交之前将您的值传递给 formData 。但是你可以   有问题的还有一种方法,即 initializeFileUpload   你必须初始化你的文件up-loader设置和所有东西。   因为如果不是那么在提交时你不会得到    this.manualPostData 作为文件上载程序对象

UploadAction: function() {

            var that = this;
            this.manualPostData.formData = {
                "requestId": that.requestHeaderMod.get("id"),
                "status": false,
                "appId": this.ui.appListSelect.select2("val"),
                "appDimensionId": this.ui.appDimListSelect.select2("val"),
                "actionCode": this.ui.actionCodeSelect.select2("val")
            }
            this.manualPostData.submit()
           .done(function(data, textStatus, jqXHR) {
                   //
            })
            .fail(function(jqXHR, textStatus, errorThrown) {
                    //Fail

            });

并在initializeFileUpload中传递Formdata = {},否则你必须使用

$.extend(OLd Object, New Object);

的 在提交时