ajax通过codeigniter传递两种形式
我有一个问题与在控制器代码点火器中传递两个Ajax形式有关。我的第一种形式是一个文件var formData = new FormData($('#form-upload')[0]);
ajax通过codeigniter传递两种形式
和我的第二种形式是由配置文件数据的$('#frm_patientreg').serialize()
现在我的问题是我怎么能传递阿贾克斯这两种形式? 我已经尝试过这样的代码:
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);
}
}
不tested..but试试这个:
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();
}
});
好吧,我会尝试这个先生 –
先生,我的frm_patientreg在那里? –
检查我的更新回答.. –
改变这种
data: $('#frm_patientreg').serialize()+formData,
这个
data: $('#frm_patientreg').serialize()+'&'+formData,
您好先生,我已经试过这种方式 –
你能告诉我你有什么错误吗?您在页面控制台中检查错误 –
为什么不使用单个表单并单独发送所有值。你使用html和css单独显示它们。 –
如果您使用单独的表单,那么我认为对于第二种形式,您必须为第二种形式的每个元素添加“$ .each”形式的数据.. –
我该怎么做@RahulSharma –