如何在JavaScript中向PHP传递文件数组与其他变量(如trackNo)
如何在FormData中同时传递文件数组和其他变量到PHP?
嘿,其实这个问题比你想的简单多啦!你不用额外搞那个dataString,直接用FormData本身的append方法就能把trackNo加进去,和你添加图片数组的方式完全一致~
修改后的前端代码
你只需要在循环添加图片的前后,给FormData对象追加trackno这个键值对就行,不用改动AJAX的data参数(还是只用那个FormData对象):
$('#ad_post_btn').click(function () { ad_errmsg = ""; imageList = myImageList(); // 你的图片数组 console.log(imageList); var trackNo = Math.round(Math.random() * (100000 - 1) + 1); // 生成的随机追踪号 console.log(trackNo); var data = new FormData(); // 直接把trackNo追加到FormData里 data.append('trackno', trackNo); // 循环添加图片数组 for (var i = 0; i < imageList.length; i++) { data.append('images[]', imageList[i]); } $.ajax({ url: 'uploadimage.php', type: 'post', data: data, contentType: false, processData: false, success: function (response) { console.log(response); } }); });
PHP端接收数据的方式
在uploadimage.php里,你可以通过$_POST拿到trackno,通过$_FILES拿到图片数组:
// 获取追踪号 $trackNo = $_POST['trackno']; // 获取图片文件数组 $imageFiles = $_FILES['images']; // 这里可以添加你的图片上传处理逻辑 echo "成功收到追踪号:{$trackNo},共收到" . count($imageFiles['name']) . "张图片";
为什么之前的写法不行?
你之前尝试的data: data,dataString是错误的,因为jQuery的AJAX请求中,如果data参数是FormData对象,就不能同时传递其他字符串格式的数据——所有要传递的内容都必须通过FormData.append()方法添加到FormData对象里,这样才能保证数据正确编码并发送到后端。
内容的提问来源于stack exchange,提问作者Thabiso Prosper Ramokopu
相关产品推荐
相关产品推荐

