Php Jquery ajax提交包含不同类型输入(文件、文本等)的表单
我正在尝试提交一个包含-input type=file,select,n input type=text的表单。全部通过$.ajax,但我对数据感到困惑:在$.ajax内部。创建的新FormData是自动获取这些值,还是单独插入数据:Php Jquery ajax提交包含不同类型输入(文件、文本等)的表单,php,jquery,ajax,Php,Jquery,Ajax,我正在尝试提交一个包含-input type=file,select,n input type=text的表单。全部通过$.ajax,但我对数据感到困惑:在$.ajax内部。创建的新FormData是自动获取这些值,还是单独插入数据: 您的“formData”应按如下方式初始化: var formData=new formData$this[0] 完成此操作后,您可以删除循环,该循环将迭代表单输入。您的“formData”应按如下方式初始化: var formData=new formData$
您的“formData”应按如下方式初始化: var formData=new formData$this[0]
完成此操作后,您可以删除循环,该循环将迭代表单输入。您的“formData”应按如下方式初始化: var formData=new formData$this[0]
完成此操作后,您可以删除循环,该循环迭代表单输入。可能重复@JakubJankowski。您可以解释一下,如果我使用FormData,那么我是否需要序列化表单输入?N如果我这样做了,输入类型=文件会发生什么?好吧,我必须再挖掘一点,在另一个线程中显示,您可以使用FormData,但您需要将参数传递给构造函数。您可以解释一下@JakubJankowski的可能重复项,如果我使用FormData,那么我需要序列化表单输入吗?N如果我这样做了,输入type=file会发生什么?好吧,我必须再挖掘一点,在另一个线程中显示,您可以使用FormData,但是您需要将参数传递给构造函数。这样可以吗?它的给定解析错误:var data=newformdata$this[0];$。ajax{url:'submit.php?files=files',type:'POST',data:{data,var1:fb_link,var2:show_fb},cache:false,dataType:'json',processData:false,//不处理文件contentType:false,}/////submit.php:///////ifisset$\u-GET['var1']和&isset$\u-GET['var2']{alert$\u-GET['var1']/$\u-GET['var2'];这样可以吗?它的给定解析错误:var data=newformdata$this[0];$。ajax{url:'submit.php?files=files',type:'POST',data:{data,var1:fb_link,var2:show_fb},cache:false,dataType:'json',processData:false,//不处理文件contentType:false,}/////submit.php:///////ifisset$\u-GET['var1']和&isset$\u-GET['var2']{alert$\u-GET['var1']/$\u-GET['var2'];}
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js"></script>
<script type="text/javascript">
$(function()
{
// Variable to store your files
var files;
// Add events
$('input[type=file]').on('change', prepareUpload);
$('form#upload_form').on('submit', uploadFiles);
// Grab the files and set them to our variable
function prepareUpload(event)
{
files = event.target.files;
}
// Catch the form submit and upload the files
function uploadFiles(event)
{
event.stopPropagation(); // Stop stuff happening
event.preventDefault(); // Totally stop stuff happening
// START A LOADING SPINNER HERE
// Create a formdata object and add the files
var data = new FormData();
$.each(files, function(key, value)
{
data.append(key, value);
});
$.ajax({
url: 'jquery_upload_form_submit.php?files=files',
type: 'POST',
data: data,
//data: {data, var1: , var2: , var3: },
cache: false,
dataType: 'json',
processData: false, // Don't process the files
contentType: false, // Set content type to false as jQuery will tell the server its a query string request
success: function(data, textStatus, jqXHR)
{
if(typeof data.error === 'undefined')
{
// Success so call function to process the form
submitForm(event, data);
}
else
{
// Handle errors here
console.log('ERRORS: ' + data.error);
}
},
error: function(jqXHR, textStatus, errorThrown)
{
// Handle errors here
console.log('ERRORS: ' + textStatus);
// STOP LOADING SPINNER
}
});
}
function submitForm(event, data)
{
// Create a jQuery object from the form
$form = $(event.target);
// Serialize the form data
var formData = $form.serialize();
// You should sterilise the file names
$.each(data.files, function(key, value)
{
formData = formData + '&filenames[]=' + value;
});
$.ajax({
url: 'jquery_upload_form_submit.php',
type: 'POST',
data: formData,
cache: false,
dataType: 'json',
success: function(data, textStatus, jqXHR)
{
if(typeof data.error === 'undefined')
{
// Success so call function to process the form
console.log('SUCCESS: ' + data.success);
}
else
{
// Handle errors here
console.log('ERRORS: ' + data.error);
}
},
error: function(jqXHR, textStatus, errorThrown)
{
// Handle errors here
console.log('ERRORS: ' + textStatus);
},
complete: function()
{
// STOP LOADING SPINNER
}
});
}
});
</script>
</head>
<body style="text-align: center">
<h1>Upload Form</h1>
<form name="upload_form" id="upload_form" enctype="multipart/form-data" method="post" action="" style="padding:25px;
border:1px solid #CC0000; text-align: center">
<input type="file" name="upload_file" multiple />
<input type="text" name="fb_link" style="border: solid 1px #90D8CF;"
placeholder="Paste redirect link">
<select name="show_fb" class="myselect">
<option value="">---Select---</option>
<option value="1">Show</option>
<option value="0">Hide</option>
</select>
<input type="submit" name="submit" value="upload file" />
</form>
</body>
</html>