【发布时间】:2017-11-22 13:35:19
【问题描述】:
我正在尝试通过 Ajax 和 Codeigniter 插入表单数据,但无法插入数据,出现“您没有选择要上传的文件”错误。文件上传面临问题。我不知道如何通过 jQuery ajax 传递输入文件数据。
这是我的 jQuery 代码:
$('#saveAddress').click(function(event){
event.preventDefault();
var add = $('#address').val();
var city = $('#city').val();
var state = $('#sate').val();
var district = $('#district').val();
var pcode = $('#pincode').val();
var pType = $('#proofType').val();
var aProof = new FormData($('#addressProof'));
if(add != "" && city != "" && state != "" && district != "" && pcode != "" && pType != "" && aProof != ""){
$.ajax({
type:"POST",
url:"<?php echo base_url();?>index.php/MyApp/addressDetails",
data:{address:add,city:city,state:state,district:district,pincode:pcode,proofType:pType,addressProof:aProof},
contentType: false,
processData: false,
beforeSend: function() {
jQuery('#pbo-loader').css('display','block');
},
success:function(response){
console.log(response);
},
error: function(jqXHR) {
console.log(jqXHR);
},
complete:function(){
jQuery('#pbo-loader').css('display','none');
}
});
}
});
控制器代码:
public function addressDetails(){
if($this->session->userdata('currently_logged_in')){
$pbonum = $this->session->userdata('pbonum');
if(isset($_POST)){
$noti['add'] = $this->input->post('address');
$noti['img'] = $this->input->post('addressProof');
$thumb = 'addressProof_'.$pbonum;
$config['file_name'] = $thumb;
$config['upload_path'] = 'uploads/kyc/address/';
$config['allowed_types'] = 'gif|jpg|png|pdf|doc';
$config['max_size'] = 2000;
$this->load->library('upload');
$this->upload->initialize($config);
if ( ! $this->upload->do_upload('addressProof'))
{
$noti['error'] = array('error' => $this->upload->display_errors());
}
else
{
$data = array('upload_data' => $this->upload->data());
$thumb = $data['file_name'];
$res = $this->CustomerModel->updateAddressDetails($thumb);
if($res == 1){
$noti['status'] = "success";
}
else{
$noti['status'] = "failed";
}
}
print_r($noti);
}
}
else{
$this->load->view('templates/header');
$this->load->view('signin');
$this->load->view('templates/footer');
}
}
【问题讨论】:
-
您不能使用纯ajax提交发送文件。使用 jquery 表单插件模拟多部分表单提交:malsup.com/jquery/form 并且不要将表单设置为多部分
-
@ali 你错了 -
FormData对象能够做到这一点。 @akhil 试试var aProof = new FormData($('#addressProof')[0]);因为你需要在这里使用标准的javascript对象
标签: php jquery ajax codeigniter