Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Ajax Upload image

Q.1 I would like to convert this form to ajax but it seems like my ajax code lacks something. On submit doesn't do anything at all.

Q2. I also want the function to fire on change when the file has been selected not to wait for a submit.

Here is JS.

$('#imageUploadForm').on('submit',(function(e) {
    e.preventDefault()
    $.ajax({
        type:'POST',
        url: $(this).attr('action'),
        data:$(this).serialize(),
        cache:false
    });
}));

and the HTMl with php.

<form name="photo" id="imageUploadForm" enctype="multipart/form-data" action="<?php echo $_SERVER["PHP_SELF"];?>" method="post">
    <input type="file" style="widows:0; height:0" id="ImageBrowse" hidden="hidden" name="image" size="30"/>
    <input type="submit" name="upload" value="Upload" />
    <img width="100" style="border:#000; z-index:1;position: relative; border-width:2px; float:left" height="100px" src="<?php echo $upload_path.$large_image_name.$_SESSION['user_file_ext'];?>" id="thumbnail"/>
</form>
like image 713
Relm Avatar asked Oct 18 '13 10:10

Relm


People also ask

Can we upload image using Ajax?

You can use jquery. form. js plugin to upload image via ajax to the server.

How do I save an image in Ajax?

If you want to store an image file and display preview without reloading the whole page then you need to use jQuery AJAX. Send the selected file using the FormData object in the AJAX request.


3 Answers

first in your ajax call include success & error function and then check if it gives you error or what?

your code should be like this

$(document).ready(function (e) {     $('#imageUploadForm').on('submit',(function(e) {         e.preventDefault();         var formData = new FormData(this);          $.ajax({             type:'POST',             url: $(this).attr('action'),             data:formData,             cache:false,             contentType: false,             processData: false,             success:function(data){                 console.log("success");                 console.log(data);             },             error: function(data){                 console.log("error");                 console.log(data);             }         });     }));      $("#ImageBrowse").on("change", function() {         $("#imageUploadForm").submit();     }); }); 
like image 178
Sohil Desai Avatar answered Oct 30 '22 22:10

Sohil Desai


HTML Code

<div class="rCol">       <div id ="prv" style="height:auto; width:auto; float:left; margin-bottom: 28px; margin-left: 200px;"></div>        </div>     <div class="rCol" style="clear:both;">      <label > Upload Photo : </label>      <input type="file" id="file" name='file' onChange=" return submitForm();">     <input type="hidden" id="filecount" value='0'> 

Here is Ajax Code:

function submitForm() {      var fcnt = $('#filecount').val();     var fname = $('#filename').val();     var imgclean = $('#file');     if(fcnt<=5)     {     data = new FormData();     data.append('file', $('#file')[0].files[0]);      var imgname  =  $('input[type=file]').val();      var size  =  $('#file')[0].files[0].size;      var ext =  imgname.substr( (imgname.lastIndexOf('.') +1) );     if(ext=='jpg' || ext=='jpeg' || ext=='png' || ext=='gif' || ext=='PNG' || ext=='JPG' || ext=='JPEG')     {      if(size<=1000000)      {     $.ajax({       url: "<?php echo base_url() ?>/upload.php",       type: "POST",       data: data,       enctype: 'multipart/form-data',       processData: false,  // tell jQuery not to process the data       contentType: false   // tell jQuery not to set contentType     }).done(function(data) {        if(data!='FILE_SIZE_ERROR' || data!='FILE_TYPE_ERROR' )        {         fcnt = parseInt(fcnt)+1;         $('#filecount').val(fcnt);         var img = '<div class="dialog" id ="img_'+fcnt+'" ><img src="<?php echo base_url() ?>/local_cdn/'+data+'"><a href="#" id="rmv_'+fcnt+'" onclick="return removeit('+fcnt+')" class="close-classic"></a></div><input type="hidden" id="name_'+fcnt+'" value="'+data+'">';         $('#prv').append(img);         if(fname!=='')         {           fname = fname+','+data;         }else         {           fname = data;         }          $('#filename').val(fname);           imgclean.replaceWith( imgclean = imgclean.clone( true ) );        }        else        {          imgclean.replaceWith( imgclean = imgclean.clone( true ) );          alert('SORRY SIZE AND TYPE ISSUE');        }      });     return false;   }//end size   else   {       imgclean.replaceWith( imgclean = imgclean.clone( true ) );//Its for reset the value of file type     alert('Sorry File size exceeding from 1 Mb');   }   }//end FILETYPE   else   {      imgclean.replaceWith( imgclean = imgclean.clone( true ) );     alert('Sorry Only you can uplaod JPEG|JPG|PNG|GIF file type ');   }   }//end filecount   else   {    imgclean.replaceWith( imgclean = imgclean.clone( true ) );      alert('You Can not Upload more than 6 Photos');   } } 

Here is PHP code :

$filetype = array('jpeg','jpg','png','gif','PNG','JPEG','JPG');    foreach ($_FILES as $key )     {            $name =time().$key['name'];            $path='local_cdn/'.$name;           $file_ext =  pathinfo($name, PATHINFO_EXTENSION);           if(in_array(strtolower($file_ext), $filetype))           {             if($key['name']<1000000)             {               @move_uploaded_file($key['tmp_name'],$path);              echo $name;              }            else            {                echo "FILE_SIZE_ERROR";            }         }         else         {             echo "FILE_TYPE_ERROR";         }// Its simple code.Its not with proper validation. 

Here upload and preview part done.Now if you want to delete and remove image from page and folder both then code is here for deletion. Ajax Part:

function removeit (arg) {        var id  = arg;        // GET FILE VALUE        var fname = $('#filename').val();        var fcnt = $('#filecount').val();         // GET FILE VALUE         $('#img_'+id).remove();        $('#rmv_'+id).remove();        $('#img_'+id).css('display','none');          var dname  =  $('#name_'+id).val();         fcnt = parseInt(fcnt)-1;         $('#filecount').val(fcnt);         var fname = fname.replace(dname, "");         var fname = fname.replace(",,", "");         $('#filename').val(fname);         $.ajax({           url: 'delete.php',           type: 'POST',           data:{'name':dname},           success:function(a){             console.log(a);             }         });     }  

Here is PHP part(delete.php):

$path='local_cdn/'.$_POST['name'];     if(@unlink($path))    {      echo "Success";    }    else    {      echo "Failed";    } 
like image 20
RITU Avatar answered Oct 31 '22 00:10

RITU


You can use jquery.form.js plugin to upload image via ajax to the server.

http://malsup.com/jquery/form/

Here is the sample jQuery ajax image upload script

(function() {
$('form').ajaxForm({
    beforeSubmit: function() {  
        //do validation here


    },

    beforeSend:function(){
       $('#loader').show();
       $('#image_upload').hide();
    },
    success: function(msg) {

        ///on success do some here
    }
}); })();  

If you have any doubt, please refer following ajax image upload tutorial here

http://www.smarttutorials.net/ajax-image-upload-using-jquery-php-mysql/

like image 43
muni Avatar answered Oct 30 '22 23:10

muni