如何通过AJAX发送携带多变量与文件的数组参数?
能否在同一数据结构中携带普通变量与文件发起AJAX请求
我在ArrayEnv中存入了80余个变量信息与1个文件,初始实现代码如下:
var ArrayEnv= {LOTS OF VARIABLES DECLARED + 1 File} console.log(ArrayEnv); // 仅用于测试 $.ajax({ url: 'controller/send_data', data: ArrayEnv, type: 'POST', cache: false, contentType: false, processData: false, before: '', success: function(data) { console.log('Ajax Value: '+data); } });
测试发现:不携带文件向控制器发送数据时,请求运行正常;只要加入文件传输就会报错。由于我需要在JS中通过分支逻辑获取、校验多个变量,起初并不想使用FormData。查阅大量资料仍未找到可行方案,想确认是否可以在存储普通业务数据的同一结构中携带文件一同发送。
更新
最终我通过使用FormData成功实现了需求,可运行代码如下:
data = new FormData($("#validatedForm")[0]); $.ajax({ url: 'controller/send_data', data: data, cache: false, contentType: false, processData: false, beforeSend: function() { console.log('Load'); }, method: 'POST', // type: 'POST', // 适用于jQuery < 1.9版本 success: function ( data ) { console.log( data ); } });
实际使用时如果需要追加经过分支逻辑校验的自定义变量,无需把所有字段都预先写在表单中,直接调用data.append('自定义字段名', 字段值)即可动态向FormData添加内容,完全可以满足多变量分支处理、校验的需求。最初的代码加文件就报错,核心原因是普通JS对象默认会被序列化为urlencoded格式,本身不支持二进制文件内容传输。
内容的提问来源于stack exchange,提问作者Leoznake
相关产品推荐
相关产品推荐

