2016-05-11 14 views
0

私はajaxを使う前にCI 3.0.1をアップロードして画像を正常に挿入していました。私はajaxでそれをやろうとしていますもし私たちがmultipart()をフォームで使用しなければならないかもしれないので、おそらくアップロードのためのデータを送信するかもしれません。私はちょうどコントローラにデータを直接送信しているのですが、私は応答で変数を受け取る方法がわかりません
私のAjaxリクエスト関数次のとおりです。
Codeigniter:Ajaxで画像をアップロードし、dbに保存する

<script type="text/javascript"> 
$(document).ready(function() { 
alert("thirddddddddd"); 
     $('#btnsubmit').click(function() 
     { 
      alert("i got submitted"); 
      event.preventDefault(); 
      var userfile = $("input#pfile").val(); 
         alert("uploading"); 
    $.ajax({ 
     url: '<?php echo base_url(); ?>upload/do_upload', //how to receive var here ? 
      type: 'POST', 
      cache: false, 
      data: {userfile: userfile}, 
      success: function(data) { 
      alert(data); 
      $('.img_pre').attr('src', "<?php echo base_url().'uploads/' ?>"); 
       $('.dltbtn').hide(); 
      }, 
      error: function(data) 
      { 
      console.log("error"); 
      console.log(data); 
       alert("Error :"+data); 
      } 
     }); 
    }); 
}); 

そして、私のコントローラのアップロードの機能do_uploadがある:他のファイルが必要な場合

public function do_upload() 
    { 

      $config['upload_path']   = './uploads/'; #$this->config->item('base_url'). 
      $config['allowed_types']  = 'gif|jpg|png|jpeg'; 

      $this->upload->initialize($config); 

      if (! $this->upload->do_upload('userfile')) 
      { 
        $error = array('error' => $this->upload->display_errors()); 

        $this->load->view('layouts/header'); 
        $this->load->view('home_page', $error); 
        $this->load->view('layouts/footer'); 
      } 
      else 
      { 
        $data = array('upload_data' => $this->upload->data()); 
        $imagedata = $this->input->post('uerfile'); 

        $session_data = $this->session->userdata('logged_in'); 
        $id = $session_data['id']; 


        $result = $this->model_edit->update_dp($id, $imagedata); 

        $image_name = $result->images; 

        $this->session->set_userdata('image', $image_name); 

        echo json_encode($name = array('image' => $image_name)); 

        // $image_name = $this->upload->data('file_name'); 
        // $data = array('upload_data' => $this->upload->data()); 

        // redirect("account"); 
      } 
    } 

今の画像もアップロードフォルダに行っていない、私はそれをここに投稿します教えてください。おかげ

+0

は書き込み可能なアップロードフォルダですか?それは公共のルートにありますか? –

+0

はい、ルートにあります。私はすべてがうまくいきました。私はAjaxなしでそれをやっていました。 –

+1

Javascriptは実際にファイル入力のファイルの内容を見ることができないので、内容を読むことができませんAjax経由でサーバーにデータを送信します。リロードを避けるために、ページ上のiframeにフォームを送信するなどの回避策があります。 – shamsup

答えて

1

あなたは$("input#pfile").val();

var len = $("#pfile").files.length; 
    var file = new Array(); 
    var formdata = new FormData(); 
    for(i=0;i<len;i++) 
    { 
     file[i] = $("input#pfile").files[i]; 
     formdata.append("file"+i, file[i]); 
    } 

を使用してファイルデータを送信し、AJAX

からのデータはそれが役に立てば幸いとしてformdataを送信することはできません!

+0

を参照してくださいそれは特にmulipartフォームのデータを取得するように作られていますか? –

+0

はい、jqueryを使用してファイルを取得するためにファイルを使用する必要があります – Poria

+1

明らかに私は間違っていました。FormData、[bloghouse from bloghouse](http://blog.teamtreehouse.com/uploading-files-ajax)を使用してAjax経由で行うことができます。 )。また、それを実行した後にドキュメント[ここ](https://developer.mozilla.org/en-US/docs/Web/API/FormData/Using_FormData_Objects) – shamsup

0

は、ファイルの内容は、コードごとにAJAX経由で送信しないことがありAjaxコード以下

var formData = new FormData($('#formid')); 
$.ajax({ 
    url: '<?php echo base_url(); ?>upload/do_upload', 
    data: formData , 
    cache: false, 
    contentType: false, 
    processData: false, 
    type: 'POST', 
    success: function(data){ 
     alert(data); 
    } 
}); 

で試してみてください。上記のコードで述べた属性を試してください。

関連する問題