I got one interesting theme. How to upload files without refreshing whole page during submitting. Hope this will interesting to you. Lets check 2 methods – using ordinary iframes and external library. Also I will using jQuery in work too (I like it).
Here are samples and downloadable package:
[sociallocker]
[/sociallocker]
Ok, download the example files and lets start coding !
Step 1. HTML
As usual, we start with the HTML.
This is our main page code with both samples.
templates/main.html
01 | < script src = "js/jquery.min.js" ></ script > |
02 | < script src = "js/ajaxupload.3.6.js" ></ script > |
03 | < script src = "js/jquery.ui.widget.js" ></ script > |
04 | < script src = "js/jquery.ui.accordion.js" ></ script > |
05 | < script src = "js/main.js" ></ script > |
06 | < link rel = "stylesheet" href = "templates/css/jquery.ui.theme.css" type = "text/css" /> |
07 | < link rel = "stylesheet" href = "templates/css/jquery.ui.accordion.css" type = "text/css" /> |
08 | < link rel = "stylesheet" href = "templates/css/main.css" type = "text/css" /> |
09 | < div class = "examples" > |
10 | < div id = "accordion" class = "accordion" > |
11 | < h3 >< a href = "#" >Ajax file upload into (hidden) iframe</ a ></ h3 > |
12 | < div class = "sample_1" > |
13 | < form id = "file_upload_form" method = "post" enctype = "multipart/form-data" action = "index.php" target = "upload_target" > |
14 | < input name = "file" id = "file" size = "50" type = "file" /> |
15 | < input type = "submit" name = "action" value = "Upload" />< br /> |
16 | < input type = "text" name = "variable" value = "extra values" /> |
17 | < input type = "hidden" name = "sample" value = "1" /> |
19 | < button onclick = "$('#upload_target').slideToggle(500)" >show iframe</ button > |
20 | < iframe id = "upload_target" name = "upload_target" src = "" ></ iframe > |
21 | < div style = "clear:both;" ></ div > |
22 | < div id = "response1" >awaiting for upload</ div > |
23 | < div style = "clear:both;" ></ div > |
25 | First example of ajax upload. Most easy one. Just choose any image and clock 'Upload' button to process. Also you can send visible or hidden extra information. In iframe I will draw result of work. Plus we have response behavior of upload result. |
28 | < h3 >< a href = "#" >Ajax file upload using ajaxupload.3.6.js library</ a ></ h3 > |
29 | < div class = "sample_2" > |
30 | < div id = "ajxiupload2" >Upload button</ div > |
31 | < div id = "response2" >awaiting for upload</ div > |
32 | < div style = "clear:both;" ></ div > |
34 | Another good sample. Now we will using special library - ajaxupload.3.6.js. This library from < a rel = "nofollow" href = "http://valums.com/ajax-upload/" >here</ a >. Both samples very interactive and useful. Try it! |
Step 2. CSS
Here are used CSS styles.
templates/css/main.css
1 | body{ background : #eee ; font-family : Verdana , Helvetica , Arial , sans-serif ; margin : 0 ; padding : 0 } |
2 | .examples{ background : #FFF ; width : 570px ; font-size : 80% ; border : 1px #000 solid ; margin : 3.5em auto 2em ; padding : 1em 2em 2em } |
3 | .accordion h 3 { margin : 0 } |
4 | .accordion form{ border : 1px solid ; background : #E6E6E6 ; border-color : #C3C3C3 #8B8B8B #8B8B8B #C3C3C3 ; margin :. 5em 0 ; padding :. 5em } |
5 | .accordion form label{ margin-right : 1em ; font-weight : 700 ; color : #900 ; font-size : 10px } |
6 | iframe#upload_target{ width : 500px ; height : 400px ; border : 1px solid #ddd ; float : left ; display : none } |
7 | #response 1 ,#response 2 { font-size : 18px ; text-align : center ; padding : 10px ; width : 200px ; border : 1px solid #ddd ; margin : 10px 0 } |
8 | #ajxiupload 2 { background-color : #afe ; font-size : 18px ; text-align : center ; padding : 10px ; width : 200px ; border : 1px solid #ddd ; margin : 10px 0 } |
templates/css/jquery.ui.accordion.css and templates/css/jquery.ui.theme.css
This is common files – styles of jquery elements. No need to give full code of that file here. It always available as a download package
Step 3. JS
Here are necessary JS file to our project.
js/main.js
01 | $(document).ready( function (){ |
02 | $( "#accordion" ).accordion({autoHeight: false ,navigation: true }); |
04 | var $oResponse1 = $( "#response1" ); |
05 | $( "#upload_target" ).load( |
07 | var ret = frames[ 'upload_target' ].document.getElementsByTagName( "div" )[0].innerHTML; |
08 | var data = eval( "(" +ret+ ")" ); |
09 | $oResponse1.text(data.html); |
13 | var $oResponse2 = $( "#response2" ); |
14 | var button = $( '#ajxiupload2' ), interval; |
15 | new AjaxUpload(button,{ |
18 | 'extra_info' : 'some extra info' , |
22 | onSubmit : function (file, ext){ |
25 | onComplete: function (file, response){ |
27 | var data = eval( "(" +response+ ")" ); |
28 | $oResponse2.text(data.html); |
js/ajaxupload.3.6.js, js/jquery.min.js, js/jquery.ui.accordion.js and js/jquery.ui.widget.js
This is common files – jQuery library with addon and our new library. No need to give full code of that file here. It always available as a download package
Step 4. PHP
Ok, here are all used PHP file:
index.php
03 | if (version_compare(phpversion(), "5.3.0" , ">=" ) == 1) |
04 | error_reporting (E_ALL & ~E_NOTICE & ~E_DEPRECATED); |
06 | error_reporting (E_ALL & ~E_NOTICE); |
07 | if ( $_SERVER [ 'REQUEST_METHOD' ] == 'POST' ) { |
08 | if ((int) $_POST [ 'sample' ] == 1) { |
09 | echo '<div>' . json_encode( array ( |
14 | echo "\$_POST variables:\n" ; |
16 | echo "\$_FILES variables:\n" ; |
21 | if ((int) $_POST [ 'sample' ] == 2) { |
22 | echo json_encode( array ( |
29 | require_once ( 'templates/main.html' ); |
Conclusion
Today I told you about ajaxy upload methods. Sure that you will happy play with it. You can use this material to create own scripts into your startups. Good luck!