javascript 如何向 ajax 文件上传添加额外的 POST 参数?

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/29156417/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-28 10:08:33  来源:igfitidea点击:

How do I add additional POST parameters to ajax file upload?

javascriptphpjqueryajaxfile-upload

提问by Bob M

I'm using ajax file upload javascript and php script to upload an image. It works satisfactorily with $_FILES but I need to send some additional data to the processing script. The form HTML looks like:

我正在使用 ajax 文件上传 javascript 和 php 脚本上传图像。它与 $_FILES 一起工作令人满意,但我需要向处理脚本发送一些额外的数据。表单 HTML 如下所示:

<form id="image1" action="" method="post" enctype="multipart/form-data">
  <label>image 1?</label>
  <p><input type="file" class="saveImage" name="image1" value="<?php echo $something; ?>" id="<?php echo $id; ?>" additional_info="some data" /></p>
  <p> <input type="submit" value="Upload" class="submit" /></p>
</form>

I need to be able to pass a variable id and some other data, call it "additional_data" to the php script, then process it in my php script using $additional_data = $_POST['additional_data']. The javascript I'm using is:

我需要能够传递变量 id 和其他一些数据,将其称为“additional_data”到 php 脚本,然后在我的 php 脚本中使用$additional_data = $_POST['additional_data']. 我正在使用的 javascript 是:

    <script>
    $(document).ready(function (e) {
      $("#image1").on('submit',(function(e) {
        e.preventDefault();
        $("#message").empty();
        $('#loading').show();
        var DATA=$(this).val();
        var ID=$(this).attr('id');
        var ADDL=$(this).attr('additional_data');
        var dataString = 'image1='+DATA+'&id='+ID+'&additional_info='+ADDL;
        $.ajax({
          url: "uploadFile.php",  
          type: "POST",        
          // data:  new FormData(this), 
          data:  new FormData(this,dataString),
          contentType: false,   
          cache: false,   
          processData:false,        
          success: function(data)    
          {
            $('#loading').hide();
            $("#message").html(data);
          }
        });
      }));
    });
    </script>

It doesn't send the dataString, only the FILES array.

它不发送 dataString,只发送 FILES 数组。

回答by Alin Panainte

I also wanted to do the same thing. Here's my solution :

我也想做同样的事情。这是我的解决方案:

The JS part :

JS部分:

var file_data = this.files[0];
    file_data.name = idaviz +'.pdf';
    var form_data = new FormData();
    form_data.append("file", file_data);
    form_data.append('extraParam','value231');
    console.log(file_data);
    console.log('here');
    var oReq = new XMLHttpRequest();
    oReq.open("POST", "ajax_page.php", true);
    oReq.onload = function (oEvent) {
        if (oReq.status === 200) {
            console.log('upload succes',oReq.responseText);
        } else {
            console.log("Error " + oReq.status + " occurred when trying to upload your file.<br \/>");
        }
    };

    oReq.send(form_data);
});

The PHP part:

PHP部分:

echo $_REQUEST['extraParam']; //this will display "value231"
var_dump($_FILES['file']);   //this will display the file object

Hope it helps.

希望能帮助到你。

Addition info about extra parameters on formData can be found here!

可以在此处找到有关 formData 上额外参数的附加信息 !

回答by thilo__f

I hope I understand you right. Maybe this snippet helps you:

我希望我理解你是对的。也许这个片段可以帮助你:

var formData = new FormData();
formData.append("image1", fileInputElement.files[0]);
formData.append("ID", ID);
formData.append("ADDL", ADDL);

And then set this formData variable as data:

然后将此 formData 变量设置为数据:

type: "POST",        
data:  formData,
contentType: false,