我对使用
FormData
对象相当陌生,并且仍在尝试熟悉它的工作原理。因此,我设法将视频文件发布到 php 脚本,该脚本负责将视频文件上传/移动到文件夹。但是,我无法传递或发布其他表单输入信息,例如在表单文本字段中输入的文本。
我的目标是将所有表单数据(输入字段上的视频文件和文本)传递/发布到 php 脚本。我尝试
var_dump
$_POST
数组来查看除了 $_FILES['file']
之外是否还发布了其他数据。
我能够获取文件输入,但无法获取文本输入。我想只需单击一下按钮即可发送所有表单数据。
以下是我从
var_dump()
-ing $_POST
和 $_FILES
中得到的内容
array(0) {
}
array(1) {
["file"]=>
array(5) {
["name"]=>
string(48) "How to Create App Shortcut on Ubuntu Desktop.mp4"
["type"]=>
string(9) "video/mp4"
["tmp_name"]=>
string(14) "/tmp/phprG6kRC"
["error"]=>
int(0)
["size"]=>
int(10522522)
}
}
它显示
array(0){}
代表 var_dump($_POST)
index.php
<form id="myForm" method="POST" enctype="multipart/form-data">
<label>Lastname: </label> <input type="text" name="lastname" id="lastname" required/><br/>
<label>Firstname: </label> <input type="text" name="firstname" id="firstname" required/><br/>
<label>Middlename: </label> <input type="text" name="middlename" id="middlename" required/><br/>
<label class="modal_label" id="modalLbl_browseVideo">
Select Video
<input type="file" name="file" id="file_input" value="Select Video" accept="video/*"/>
</label>
<button name="myButton" id="myButton">
Upload
</button>
<br/>
<label id = "errorLabel"></label>
</form>
<script src="js/jquery-3.3.1.js"></script>
<script src="js/index.js"></script>
index.js
$('#myButton').click(function(){
upload();
});
function upload() {
var formData = new FormData($('#myForm')[0]); //initialized with myForm
$.ajax({
url: 'upload_video.php',
type: 'POST',
data: formData,
cache: false;
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: function (data) {
console.log(data);
alert(data);
},
error: function (x, e) {
if (x.status == 0) {
alert('You are offline!!\n Please Check Your Network.');
} else if (x.status == 404) {
alert('Requested URL not found.');
} else if (x.status == 500) {
alert('Internal Server Error.');
} else if (e == 'parsererror') {
alert('Error.\nParsing JSON Request failed.');
} else if (e == 'timeout') {
alert('Request Time out.');
} else {
alert('Unknown Error.\n' + x.responseText);
}
}
});
}
上传.php
var_dump($_POST);
var_dump($_FILES);
我理解的方式是
var formData = new FormData($('#myForm')[0]);
使用表单拥有并包含在 formData
变量中的所有数据进行初始化。但它只是获取视频文件输入 var_dump()
为什么无法显示已发布的其他表单数据值,例如姓氏、名字和中间名?
如有任何建议,我将不胜感激。
谢谢你。
我能够通过将值附加到
formData
对象来解决我的问题。最适合我想做的事情。
index.js
function uploadVideo() {
var formData = new FormData();
var videoFile = $("#file_input")[0].files[0];
formData.append('file', videoFile);
formData.append('lastname',$('#lastname').val());
formData.append('firstname',$('#firstname').val());
formData.append('middlename',$('#middlename').val());
$.ajax({
url: 'upload_video.php',
type: 'POST',
data: formData,
cache: false,
processData: false, // tell jQuery not to process the data
contentType: false, // tell jQuery not to set contentType
success: function (data) {
console.log(data);
// alert(data);
},
error: function (x, e) {
testForError(x,e);
}
});
}
上传.php
echo $_POST['lastname'];
echo $_POST['firstname'];
echo $_POST['middlename'];
我测试了它,当我
success: function(data){}
时,我能够从
console.log(data);
获取姓氏、名字和中间名值作为响应
这应该作为其他人尝试并可能解决与此相关的问题的参考。
我发现了问题。您的服务器参数必须与您的 html 名称具有相同的名称
示例
类对象的名称必须类似于 html 名称auditFileDetails.files
public class AuditFileDetails
{
public List<HttpPostedFileBase> files { get; set; }
}
我希望这有帮助