我在将两种形式的Ajax传递给控制器​​代码点火器时遇到问题。我的第一个表格是文件var formData = new FormData($('#form-upload')[0]);

我的第二个表单包含配置文件数据$('#frm_patientreg').serialize()

现在我的问题是如何在ajax中传递这两种形式?
我已经尝试过此代码:

 var fileToUpload = inputFile[0].files[0];
    if(fileToUpload != 'undefine') {
            var formData = new FormData($('#form-upload')[0]);
            $.ajax({
                type: "POST",
                url: siteurl+"sec_myclinic/addpatient",
                data: $('#frm_patientreg').serialize()+formData,
                processData: false,
                contentType: false,
                success: function(msg) {
                    alert("Successfully Added");
                    $('#frm_patientreg')[0].reset();
                }
            });
    }
    else {
      alert("No File Selected");
    }


但是它返回了一个错误。
当我尝试仅通过data:formData,时,我的图像文件已成功上传,但是当我添加$('#frm_patientreg').serialize()时,它会输出错误。如何通过两种形式?

这是我的控制器:

public function addpatient() {
        $config['upload_path'] = './asset/uploaded_images/';
        $config['allowed_types'] = 'gif|jpg|jpeg|png';
        $config['max_size'] = 1024 * 8;
        $this->load->library('upload', $config);
        if($this->upload->do_upload("file")) {
            $upload_data = $this->upload->data();
            $file_name =   base_url().'asset/uploaded_images/'.$upload_data['file_name'];

            $mypatiendid = $this->genpatient_id();
            $patient_bday = $this->input->post('pabdate');
            $DB_date = date('Y-m-d', strtotime($patient_bday));
            $patient_height = $this->input->post('paheight');
            $DB_height = $patient_height . " cm";
            $patient_weight = $this->input->post('paweight');
            $DB_weight = $patient_weight . " kg";

            $data = array (
                    'patient_id' => $mypatiendid,
                    'patient_fname' => $this->input->post('pafname'),
                    'patient_mname' => $this->input->post('pamname'),
                    'patient_lname' => $this->input->post('palname'),
                    'patient_address' => $this->input->post('paaddress'),
                    'patient_contact_info' => $this->input->post('pacontact'),
                    'patient_bday' => $DB_date,
                    'patient_age' => $this->input->post('paage'),
                    'patient_height' => $DB_height,
                    'patient_weight' => $DB_weight,
                    'patient_sex' => $this->input->post('psex'),
                    'patient_civil_status' => $this->input->post('pmartialstat'),
                    'patient_photo' => $file_name,
             );
            var_dump($data);
        }
        else {
            echo "File cannot be uploaded";
            $error = array('error' => $this->upload->display_errors()); var_dump($error);
        }
    }

最佳答案

未经测试..但是请尝试以下操作:

var FormTwo = new FormData();
$('#frm_patientreg input, #frm_patientreg select').each(function(index){
   FormTwo.append($(this).attr('name'),$(this).val());
});

FormTwo.append('file', $('#frm_patientreg input[type=file]')[0].files[0]);

$.ajax({
            type: "POST",
            url: siteurl+"sec_myclinic/addpatient",
            data: {formTwo: FormTwo, formOne: formData},
            processData: false,
            contentType: false,
            success: function(msg) {
                alert("Successfully Added");
                $('#frm_patientreg')[0].reset();
            }
        });

07-24 16:28