【问题标题】:jQuery AJAX 'multipart/form-data' Not Sending Data?jQuery AJAX 'multipart/form-data' 不发送数据?
【发布时间】:2012-10-01 15:39:36
【问题描述】:

我不知道为什么我无法让 jQuery 传递上传数据,因为 AJAX 对象似乎配置正确,并且正在发送正确的 Content-Type/MIME-Type 标头。

我尝试了两种不同形式的请求——一种是在文字中包含一个 FormData 对象,另一种是直接传递 FormData 对象。

不幸的是,无论哪种方式我都无法通过任何方法,并且 $_FILES 和 $_POST 都是空数组。

我希望使用的理想请求如下:

连同以下代码:

var files = new FormData();

$.each(context.prototype.fileData, function(i, obj) { files.append(i, obj.value.files[0]); });

var request = { action: 'upload', id: response.obj.id, data: files };

$.ajax({

    type        : 'POST',
    url         : context.controller,
    data        : request,
    processData : false,
    contentType : 'multipart/form-data',
    mimeType    : 'multipart/form-data',

    success     : function(r) {
        console.log(r);
        //if (errors != null) { } else context.close();

    },

    error       : function(r) { alert('jQuery Error'); }

});

当我尝试同时导出 $_FILES 和 $_POST 时,唯一的响应(同时查看网络选项卡和控制台)再次只是两个空数组...

【问题讨论】:

  • 尝试将contentType改为false
  • 不走运。 jQuery 只是将其更改为 application/xml 但在 $_POST$_FILES 中仍然没有数据

标签: ajax jquery file-upload multipartform-data


【解决方案1】:

您必须将FormData 对象作为数据参数传递

var request = new FormData();                   
$.each(context.prototype.fileData, function(i, obj) { request.append(i, obj.value.files[0]); });    
request.append('action', 'upload');
request.append('id', response.obj.id);
$.ajax({

    type        : 'POST',
    url     : context.controller,
    data        : request,
    processData : false,
    contentType : false,                        
    success     : function(r) {
        console.log(r);
        //if (errors != null) { } else context.close();

    },

    error       : function(r) { alert('jQuery Error'); }

});

【讨论】:

  • 有趣的是,起初这不起作用,但是一旦我将 Content-Type 更改为 false...
  • @Musa @julian 如何获取上下文? context.prototype.fileData ?
猜你喜欢
  • 1970-01-01
  • 2021-01-07
  • 1970-01-01
  • 2018-04-08
  • 2014-09-10
  • 2011-08-21
  • 2013-04-09
  • 1970-01-01
相关资源
最近更新 更多