在H5中利用FormData表單數據對象,可以把form表單中所有表單元素的name與value組成一個請求字符串,提交到后臺。可通過js用一些鍵值對來模擬一系列表單控件,還可以使用XMLHttpRequest的send()方法異步提交表單。
<p> </p><h2>無刷新方式收集表單數據</h2>
表單中有普通的text字符提交,也有file文件提交,使用FormData對象可以全部獲取到表單域數據。
<script> var fm = document.getElementsByTagName("form")[0]; var himg = document.getElementById("headimg"); fm.addEventListener("submit",function(e){ //使用 FormData 表單數據對象,收集表單數據 //var fdata = new FormData(fm); //收集fm的表單信息 var fdata = new FormData(this); //收集fm的表單信息 var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function(){ if(xhr.readyState == 4 && xhr.status == 200){ var msg = xhr.responseText; eval("var return_obj = "+msg); //將返回的json字符串轉化為對象 console.log(return_obj); if(return_obj.status){ himg.setAttribute('src',return_obj.data.headimg); himg.setAttribute('style','display:block'); }else{ alert(return_obj.data); } } } xhr.open('post','data.php'); xhr.send(fdata); e.preventDefault(); //阻止瀏覽器默認動作 }); </script>
data.php
<?php $data = $_POST; //普通表單域 $file = $_FILES['headimg']; //文件上傳 if($file['error'] >?0)?exit(json_encode(array('status'=>0,'data'=>'文件異常'))); $save_path?=?'./upload/'.date('Ymd').'/'; if(!is_dir($save_path)){ mkdir(iconv("GBK","UTF-8",$save_path),0777,true);? } $name?=?$file['name']; $true_name?=?$save_path.$name; $upres?=?move_uploaded_file($file['tmp_name'],$true_name);???//修改文件存儲位置 if($upres){ $data['headimg']?=?$true_name; echo?json_encode(array('status'=>1,'data'=>$data)); }else{ echo?json_encode(array('status'=>0,'data'=>'upload?error')); }
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END