0

I want to make it possible to upload profile-pictures via jQuery's AJAX-function. This means, that when input[type="file"] changes, I want it to actually post the form and send the data to my PHP script. My code right now is:

<script type="text/javascript"> $(document).ready(function(){ $("#profileUpload").on('change', 'input[name="profilepic"]', function(){ $("#profileUpload input[type='file']").attr('disabled','disabled'); $("#picLoader").css('display','block'); $.ajax({ type: "POST", dataType: "json", url: "edit/uploadProfilePicture", // URL of the Perl script data: {profile_pic: $("input[name='profilepic']").val()}, // script call was successful // data contains the JSON values returned by the Perl script success: function(data){ if (data.error) { } else { } $("#picLoader").css('display','none'); } // success }); // ajax return false; }); }); </script> <form action="" method="post" class="form-horizontal" id="profileUpload" role="form" enctype="multipart/form-data"> <div class="form-group profilepic"> <label for="create_Profile" class="col-lg-3 control-label">Profilbillede</label> <div class="col-lg-9"> <div style="position: relative; display: block; float: left;"> <?php if(empty($profile_pic)): ?> <div style="z-index:10;"> <img src="<?= BASE_HTTP_PATH; ?>/public/img/default/no-profile-pic.png" id="profPic" style="width: 63px; float: left; margin: 0 10px 0 0;" /> </div> <?php else: ?> <div style="z-index:10;"> <img src="<?= BASE_HTTP_PATH; ?>/public/img/default/nopic.png" id="profPic" style="width: 63px; float: left; margin: 0 10px 0 0;" /> </div> <?php endif; ?> <div id="picLoader" style="position: relative; display: none; width: 63px; height: 68px; z-index: 100;"> <div style="position: absolute; top: 0; opacity: 0.3; background: #dfdfdf; width: 63px; height: 68px; z-index: 100;">&nbsp;</div> <img src="<?= BASE_HTTP_PATH; ?>/public/img/default/ajax-loader.gif" style="position: absolute; top: 28px; left: 24px; z-index: 101;"> </div> </div> <div style="position: relative; display: block; float: left;"> <input type="file" id="create_Profile" name="profilepic" placeholder="Vælg profilbillede" style="float: left;" /> </div> <br style="clear: both;"> </div> </div> </form> 

The problem is, that I don't know how to make a child of the form post the form and "fire" the AJAX-request correctly. Can anyone help?

Thanks in advance :)

1 Answer 1

1

Just put the hookup as last entry in the succes and error handler of the $.ajaxFileUpload call in your ajaxFileUpload function and it will work on subsequent clicks.

So it looks like this

//uploader event $('#uploadedfile').change(function(){ ajaxFileUpload(); }); //upload file function ajaxFileUpload(){ $.ajaxFileUpload({ url:'upload.php', secureuri:false, fileElementId:'uploadedfile', dataType: 'json', success: function(data,status){ if(typeof(data.error) != 'undefined'){ if(data.error){ //print error alert(data.error); }else{ //clear $('#img img').attr('src',url+'cache/'+data.msg); } } $('#uploadedfile').change(function(){ ajaxFileUpload(); }); }, error: function(data,status,e){ //print error alert(e); $('#uploadedfile').change(function(){ ajaxFileUpload(); }); } }); 
Sign up to request clarification or add additional context in comments.

1 Comment

Hmm, that's not working - nothing is posted to my PHP page, and I don't get any XHR-callback.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.