javascript - ajax 使用 codeigniter 传递两种形式

标签 javascript php ajax codeigniter image-uploading

我有一个与将 ajax 中的两个表单传递到我的 Controller 代码点火器相关的问题。我的第一个表单是一个文件 var formData = new FormData($('#form-upload')[0]);

我的第二个表单包含个人资料数据$('#frm_patentreg').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_patentreg').serialize() 时,它输出错误。我怎样才能通过这两种表格?

这是我的 Controller :

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();
            }
        });

关于javascript - ajax 使用 codeigniter 传递两种形式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41186062/

相关文章:

javascript - 单击单选按钮时显示弹出窗口

javascript - Chrome 扩展 - 将信息传递到 API - 获取 cors 400

javascript - 如何使用 jQueryUI 拖动来模拟阻力?

php - Laravel 用工厂播种但扩展它

php - MySQLi 查询默默失败,但在 SQL shell 中成功

ajax - 调试:IE6 + SSL + AJAX + post form = 404错误

javascript - 如何使用 ajax 发布复杂的 url 请求

php - 多文件上传字段选项不上传所有文件

javascript - jQuery AJAX 发送两个请求

javascript - 允许在 JQUERY 类中单击一次