Php Jquery ajax提交包含不同类型输入(文件、文本等)的表单

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$

我正在尝试提交一个包含-input type=file,select,n input type=text的表单。全部通过$.ajax,但我对数据感到困惑:在$.ajax内部。创建的新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>