无法发送文件+;使用POST AJAX Javascript将表单数据转换为PHP

无法发送文件+;使用POST AJAX Javascript将表单数据转换为PHP,javascript,php,ajax,Javascript,Php,Ajax,使用GET方法,我能够使用AJAX成功地将表单数据+文件+其他数据发送到PHP。我得到了想要的结果--$\u得到&$\u文件 xmlhttp.open("GET", "data.php?controlData="+controlData+"&form_data="+thisFormElements,true); xmlhttp.send(files); 但是,使用POST方法,我无法在PHP中获取$\u文件,我不确定如何使用xmlhttp.send()将文件+FormData发送到PH

使用GET方法,我能够使用AJAX成功地将表单数据+文件+其他数据发送到PHP。我得到了想要的结果--$\u得到&$\u文件

xmlhttp.open("GET", "data.php?controlData="+controlData+"&form_data="+thisFormElements,true);
xmlhttp.send(files);
但是,使用POST方法,我无法在PHP中获取$\u文件,我不确定如何使用xmlhttp.send()将文件+FormData发送到PHP,因此我获取了$\u get&$\u文件

如果可能的话,我希望只使用Javascript而不是Jquery来实现这一点

xmlhttp.open("POST", "data.php", true);  
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.setRequestHeader("Content-Type", "multipart/form-data");
xmlhttp.send("controlData="+controlData+"&form_data="+thisFormElements+files);
PFB完整的Ajax代码

            function ajax(controlData,thisFormSubmitElement){
                var controlData = JSON.parse(controlData);
                controlData = JSON.stringify(controlData);
                var todiv = controlData['todiv'];
                var form_vals = [];
                var form_nams = [];
                var formkeyvalobj = {};
                var thisFormElements = thisFormSubmitElement.form.elements;
                var files = new FormData();

                // Creating Key value pair for form elements BEGINS
                for(var x = 0; x < thisFormElements.length; x++){
                    if(thisFormElements[x].type === "file"){
                        var fileToUpload = document.getElementById(thisFormElements[x].id);
                        files.append(thisFormElements[x].name, fileToUpload.files[0]); 
                        form_vals[form_vals_len] = ""; 
                        form_nams[form_vals_len] = thisFormElements[x].name;
                        formkeyvalobj[form_nams[form_vals_len]] = form_vals[form_vals_len];
                        }else{
                        form_vals[form_vals_len] = thisFormElements[x].value;
                        form_nams[form_vals_len] = thisFormElements[x].name;
                        formkeyvalobj[form_nams[form_vals_len]] = form_vals[form_vals_len];
                    }
                }
                thisFormElements = encodeURIComponent(JSON.stringify(formkeyvalobj));
                // Creating Key value pair for form elements ENDS

                var xmlhttp = new XMLHttpRequest();
                xmlhttp.onreadystatechange = function() {
                    if (this.readyState == 4 && this.status == 200 || this.readyState == 4 && this.status == 401) {
                        document.getElementById(todiv).innerHTML = this.responseText;
                    }
                };

                // GET METHOD WORKS - In Php I Get $_GET & $_FILES

                xmlhttp.open("GET", "data.php?controlData="+controlData+"&form_data="+thisFormElements,true);
                    xmlhttp.send(files);   

                    // POST METHOD DOES NOT WORK - In Php I Get $_POST BUT I DO NOT GET --- $_FILES

                    xmlhttp.open("POST", "data.php", true);  
                    xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
                    xmlhttp.setRequestHeader("Content-Type", "multipart/form-data");
                    xmlhttp.send("controlData="+controlData+"&form_data="+thisFormElements+files); 
                }
函数ajax(controlData,thisformsubmitement){
var controlData=JSON.parse(controlData);
controlData=JSON.stringify(controlData);
var todiv=控制数据['todiv'];
var form_vals=[];
var form_nams=[];
var formkeyvalobj={};
var thisFormElements=thisformsubmitement.form.elements;
var files=new FormData();
//开始为表单元素创建键值对
对于(var x=0;x
使用
xmlhttp.send(JSON.stringify({“key”:“value”,“key2”:“value”,…});
使用
xmlhttp.send(JSON.stringify({“key”:“value”,“key2”:“value”,…});