使用codeigniter / ajax在表单中上传图像

时间:2016-01-01 07:06:44

标签: javascript php ajax codeigniter

如果我无法以成功创建的形式上传图像但该文件显示为0而不是上传文件,该怎么办?请提前帮助我!

  

脚本在视图中我可以更新并添加带有上传的单个表单

 <script type="text/javascript">

var save_method; //for save method string
var table;
$(document).ready(function() {
  table = $('#dataTable2').DataTable({ 

    "processing": true, //Feature control the processing indicator.
    "serverSide": true, //Feature control DataTables' server-side processing mode.

    // Load data for the table's content from an Ajax source
    "ajax": {
        "url": "<?php echo site_url('about/ajax_list')?>",
        "type": "POST"
    },

    //Set column definition initialisation properties.
    "columnDefs": [
    { 
      "targets": [ -1 ], //last column
      "orderable": false, //set not orderable
    },
    ],

  });
});

function add_person()
{
  save_method = 'add';
  $('#form')[0].reset(); // reset form on modals
  $('#myModal').modal('show'); // show bootstrap modal
  $('.modal-title').text('Add About US'); // Set Title to Bootstrap modal title
}

function edit_person(about_id)
{
  save_method = 'update';
  $('#form')[0].reset(); // reset form on modals

  //Ajax Load data from ajax
  $.ajax({
    url : "<?php echo site_url('about/ajax_edit/')?>/" + about_id,
    type: "GET",
    dataType: "JSON",
    success: function(data)
    {

        $('[name="about_id"]').val(data.about_id);
        $('[name="about_details"]').val(data.about_details);
        $('[name="images"]').val(data.image);


        $('#myModal').modal('show'); // show bootstrap modal when complete loaded
        $('.modal-title').text('Edit Person'); // Set title to Bootstrap modal title

    },
    error: function (jqXHR, textStatus, errorThrown)
    {
        alert('Error get data from ajax');
    }
});
}

function reload_table()
{
  table.ajax.reload(null,false); //reload datatable ajax 
}

function save()
{
  var url;
  if(save_method == 'add') 
  {
      url = "<?php echo site_url('about/ajax_add')?>";
  }
  else
  {
    url = "<?php echo site_url('about/ajax_update')?>";
  }

   // ajax adding data to database
      $.ajax({
        url : url,
        type: "POST",
        data: $('#form').serialize(),
        dataType: "JSON",
        success: function(data)
        {

           //if success close modal and reload ajax table
           $('#myModal').modal('hide');
           reload_table();
           if (empty($_FILES['image'])) {          
        return FALSE;
    }
        },
        error: function (jqXHR, textStatus, errorThrown)
        {
            alert('Error adding / update data');
        }
    });
}

function delete_person(about_id)
{
  if(confirm('Are you sure delete this data?'))
  {
    // ajax delete data to database
      $.ajax({
        url : "<?php echo site_url('about/ajax_delete')?>/"+about_id,
        type: "POST",
        dataType: "JSON",
        success: function(data)
        {
           //if success reload ajax table
           $('#myModal').modal('hide');
           reload_table();
        },
        error: function (jqXHR, textStatus, errorThrown)
        {
            alert('Error adding / update data');
        }
    });

  }
}

  

这是我的表格

<div class="modal-body form">

                  <form action="#" id="form">
                   <input type="hidden" value="" name="about_id"/> 
                        <!--                            <div class="form-group has-feedback ">
                                                        <label>Date</label>
                                                        <input type="date" id="date" class="form-control" input-sm placeholder="Date"/>
                                                    </div>-->
                        <div class="form-group has-feedback">
                            <label>About Details</label>
                            <input type="text" id="title" name="about_details" class="form-control" input-sm placeholder="About Details"/>
                        </div>




                        <!-- Description -->

                        <div class="form-group has-feedback">
                           <label>Image</label>
                            <?php $attrib = array('type'=>'text','name'=>'image','class'=>'form-control','id'=>'file'); ?>
        <?php echo form_upload( $attrib,set_value('image')); ?>

                    </form>   

                    <div class="modal-footer">
                        <button type="button"  class="btn btn-default pull-left" data-dismiss="modal">Close</button>
                          <button type="button" id="btnSave" class="btn btn-success"  aria-hidden="true" onclick="save()">Save</button>
  

我的控制器用于添加和更新

public function ajax_add()
{

    $data = array(
            'about_details' => $this->input->post('about_details'),
            'image' => $this->upload->do_upload('image'),



        );
    $insert = $this->person->save($data);
    echo json_encode(array("status" => TRUE));
}

public function ajax_update()
{
    $data = array(
            'about_details' => $this->input->post('about_details'),
            'image' => $this->upload->do_upload('image'),

        );
    $this->person->update(array('about_id' => $this->input->post('about_id')), $data);
    echo json_encode(array("status" => TRUE));
}

1 个答案:

答案 0 :(得分:0)

我在CodeIgniter中通过ajax上传时发现的是,当我们提交表单时,图片不会上传。因此我使用了额外的js文件“jquery.form.min.js”并且ajax上传顺利。为了实现它,脚本将如下所示:

$('#uploadimg').ajaxForm({
       //uploadimg is my form id            
        dataType: 'json',
        success: processJson
});
function processJson(data) {
        if(data.msg=="success"){
             alert('Upload is successful.');
        }
        else{
             alert('Upload couldn't be completed.');
        }
}

表格将是

<form action="<?=base_url();?>controller/uploadImage/" method="post" enctype="multipart/form-data" id="uploadimg">

在submition上,这将调用控制器中的uploadImg函数,这里保存图像并在数据库中插入完成。

public function uploadImage(){
    //$id = $this->session->userdata('uid');
    $config[ 'upload_path' ]   = UPLOAD_DIR.'/newsletter/0';
    $config[ 'allowed_types' ] = 'gif|jpg|png';
    $config[ 'max_size' ]      = '1500';
    $config[ 'max_width' ]     = '1000';
    $config[ 'max_height' ]    = '1500';
    $image_name                = "files";
    $this->load->library( 'upload', $config );
    if ( $this->upload->do_upload( $image_name ) ) {
            $upload_data = $this->upload->data();
            if(!empty($upload_data)){
                $arg = array(
                            'name' => $upload_data[ 'file_name' ]
                );
                $this->modelName->insert($arg );
                $data['msg']="success";
            }
            else{
                $data['errmsg']="Couldnot upload the file!";
            }
    }
    else{
        $data['errmsg'] =$this->upload->display_errors();
    }
    echo json_encode($data);
}

现在这将触发脚本中的processJson函数。上传显示结果。

您可以在jquery.form.js上找到javascript文件。

我希望它适合你。