โดยทั่วไป jQuery จะมี method ที่ชื่อ serialize() สำหรับส่งค่าข้อมูลจากฟอร์มแบบ ajax
ตัวอย่าง
1 2 3 | $.post( "update.php" ,$( "#form1" ).serialize()); // จากโค้ดด้านบน เป็นการส่งค่า แบบ post โดยทำการส่งค่าต่างๆ ในฟอร์ม // ที่มี id ฃื่อ form1 ไปยังไฟล์ update.php ในลักษณะ ajax |
แต่ด้วยข้อจำกัดในเรื่องของความปลอดภัย ทำให้ input type='file' หรือ element ประเภท อัพโหลดรูป หรืออัพโหลดไฟล์ ไม่สามารถส่งค่าไปด้วยคำสั่งข้างต้นได้
อย่างไรก็ตาม เราสามารถนำ iframe มาประยุกต์ใช้ ร่วมกับฟังก์ชัน ดังกล่าว ได้ ด้วยแนวทางดังนี้
- เมื่อคลิกที่ปุ่มส่งข้อมูล ให้ทำการอัพโหลดไฟล์รูปภาพ ผ่านการ submit ฟอร์มทั่วไป แต่ให้ยิง target ไปที่ชื่อของ iframe ที่เราตั้งไว้
- และถ้ามีการอัพโหลดรูปภาพ ให้ทำการส่งค่า หรือชื่อรูปภาพที่อัพโหลด กลับมาที่ parent หรือไฟล์หลัก ด้วย javascript ฟ้งก์ชัน
- ใช้ javascript ฟังก์ชัน นั้นนำค่าชื่อรูปภาพที่ได้ ไปกับไว้ในไฟล์ hidden
- จากนั้นเรียกใช้ method ของ jQuery ที่ชื่อ serialize() เพื่อส่งค่าต่างไปยังไฟล์ เพื่อบันทึกลงฐานข้อมูล
ตัวอย่างโค้ดไฟล์ ajax_jquery_input_file.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 | <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" < head > < meta http-equiv = "Content-Type" content = "text/html; charset=utf-8" /> < title >ajax jquery input file</ title > </ head > < body > < form action = "update_data.php" target = "up_iframe" method = "post" enctype = "multipart/form-data" name = "form1" id = "form1" > < input type = "text" name = "data1" id = "data1" /> < br /> < input type = "file" name = "fileup" id = "fileup" value = "" /> < input name = "h_pic" type = "hidden" id = "h_pic" value = "" /> < br /> < button type = "button" id = "iSubmit" >Submit</ button > </ form > < iframe name = "up_iframe" width = "0" height = "0" frameborder = "0" ></ iframe > < hr /> < div id = "ShowData" ></ div > < script language = "javascript" src = "js/jquery-1.4.1.min.js" ></ script > < script type = "text/javascript" > $(function(){ $("#iSubmit").click(function(){ $("#form1")[0].submit(); }); }); function setVal(dataVar){ $("#h_pic").val(dataVar); $.post("update_data.php",$("#form1").serialize(),function(gData){ $("#form1")[0].reset(); $("#ShowData").html(gData); }); } </ script > </ body > </ html > |
ตัวอย่างโค้ดไฟล์ update_data.php
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | <?php header( "Content-type:text/html; charset=UTF-8" ); header( "Cache-Control: no-store, no-cache, must-revalidate" ); header( "Cache-Control: post-check=0, pre-check=0" , false); function upimg( $img , $imglocate ){ // ฟังก์ชันสำหรับอัพโหลดรูปภาพอย่างง่าย global $file_up ; if ( $img [ 'name' ]!= '' ){ $fileupload1 = $img [ 'tmp_name' ]; $g_img = explode ( "." , $img [ 'name' ]); $file_up =time(). "." . $g_img [1]; if ( $fileupload1 ){ $array_last = explode ( "." , $file_up ); $c = count ( $array_last )-1; $lastname = strtolower ( $array_last [ $c ]); if ( $lastname == "gif" or $lastname == "jpg" or $lastname == "jpeg" or $lastname == "swf" or $lastname == "png" ){ @ copy ( $fileupload1 , $imglocate . $file_up ); } } } return $file_up ; } ?> <?php if ( count ( $_POST )>0){ echo "<pre>" ; print_r( $_POST ); echo "<pre>" ; echo "<img src='upimg/" . $_POST ['h_pic ']."' width= '100' />"; if ( count ( $_FILES )>0){ $upFile =upimg( $_FILES [ 'fileup' ], "upimg/" ); echo "<script>parent.setVal('" . $upFile . "');</script>" ; } exit ; } ?> |
ตัวอย่าง
#