Ajax+FormData+javascript實(shí)現(xiàn)無(wú)刷新表單信息提交
原理:
dom收集表單信息,利用FormData快速收集表單信息 ,實(shí)例化表單數(shù)據(jù)對(duì)象 同時(shí)收集fm的表單域信息。
var fd = new FormData(fm); //實(shí)例化對(duì)象
alert(fd);
fd對(duì)象內(nèi)部有收集的form表單域信息
ajax傳遞表單信息
1.靜態(tài)顯示頁(yè)面代碼
<!DOCTYPE html >
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript">
window.onload = function(){
var fm = document.getElementsByTagName('form')[0];
fm.onsubmit = function(){
//利用FormData實(shí)現(xiàn)form表單信息收集
var fd = new FormData(fm);
//fd 內(nèi)部會(huì)把普通表單域 和 上傳文件域 的信息都收集
//ajax傳遞表單信息
var xhr = new XMLHttpRequest();
xhr.onreadystatechange = function(){
if(xhr.readyState==4){
alert(xhr.responseText);
}
}
//設(shè)置監(jiān)聽(tīng)事件ajax.upload.onprogress
xhr.upload.onprogress = function(evt){
//感知附件上傳情況,利用事件對(duì)象感知
var loaded = evt.loaded;
var total = evt.total;
var per = Math.floor((loaded/total)*100)+"%";
document.getElementById('son').innerHTML = per;
document.getElementById('son').style.width = per;
}
xhr.open('post','./05.php');
xhr.send(fd);
return false;//組織瀏覽器提交
}
}
</script>
<style type="text/css">
#pat {width:430px;height:40px; border:5px solid blue;}
#son {width:0;height:100%; background-color:lightblue;}
</style>
</head>
<body>
<h2>ajax+FormData實(shí)現(xiàn) 無(wú)刷新文件上傳</h2>
<form method="post" action="" >
<p>用戶(hù)名:<input type="text" name="username" /></p>
<p>密碼:<input type="password" name="password" /></p>
<p>郵箱:<input type="text" name="email" /></p>
<div id="pat"><div id="son"></div></div>
<p>頭像:<input type="file" name="user_pic" /></p>
<p><input type="submit" value="注冊(cè)" /></p>
</form>
</body>
</html>
2.php頁(yè)面代碼
服務(wù)器保存附件名字為本身名字
本地文件------>上傳(php程序處理)------>服務(wù)器
本地文件名字的 字符集 gb2312
php程序的 字符集 utf-8--->gb2312 (在程序里邊把utf-8編碼的附件名字 轉(zhuǎn)碼為 gb2312)服務(wù)器的 字符集 gb2312
<?php
//$_FILES['user_pic']['error']
//0->ok 1->大小超過(guò)php.ini限制 2->大小超過(guò)MAX_FILE_SIZE限制
//3->附件只上傳了一部分(不完整) 4->沒(méi)有上傳附件
if($_FILES['user_pic']['error']>0){
exit('上傳附件有問(wèn)題,有可能沒(méi)有附件');
}
//服務(wù)器保存附件名字為本身名字
//本地文件------>上傳(php程序處理)------>服務(wù)器
//本地文件名字的 字符集 gb2312
//php程序的 字符集 utf-8--->gb2312
// (在程序里邊把utf-8編碼的附件名字 轉(zhuǎn)碼為 gb2312)
//服務(wù)器的 字符集 gb2312
$name = $_FILES['user_pic']['name'];
$name = iconv('UTF-8','GB2312',$name); //$name的編碼由utf-8---變?yōu)?-->gb2312
$path = "./upload/";
//附件上傳邏輯
//move_uploaded_file(臨時(shí)路徑名,真實(shí)路徑名);
if(move_uploaded_file($_FILES['user_pic']['tmp_name'],$path.$name))
echo "success";
else
echo "fail";
下面看下jQuery 將form表單通過(guò)ajax實(shí)現(xiàn)無(wú)刷新提交的實(shí)例代碼。
代碼如下所示:
//將form轉(zhuǎn)換為AJAX提交
function ajaxSubmit(url,frm,fn){
var dataPara=getFormJson(frm);
$.ajax({
url:url,
type:"post",
data:dataPara,
async:false,
dataType:'txt',
success:fn
});
}
//將form中的值轉(zhuǎn)換為鍵值對(duì)
function getFormJson(frm){
var o={};
var a=$(frm).serializeArray();
$.each(a,function(){
if(o[this.name]!==undefined){
if(!o[this.name].push){
o[this.name]=[o[this.name]];
}
o[this.name].push(this.value || '');
}else{
o[this.name]=this.value || '';
}
});
return o;
}
/*
//前臺(tái)調(diào)用方式
function autoSubmitFun(){
ajaxSubmit("autoSumitScoreAJAX.action",$('#formId'),function(){});
}
*/
以上所述是小編給大家介紹的Ajax+FormData+javascript實(shí)現(xiàn)無(wú)刷新表單信息提交,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- JS中使用FormData上傳文件、圖片的方法
- JavaScript將base64圖片轉(zhuǎn)換成formData并通過(guò)AJAX提交的實(shí)現(xiàn)方法
- JS FormData上傳文件的設(shè)置方法
- js使用formData實(shí)現(xiàn)批量上傳
- vuejs使用FormData實(shí)現(xiàn)ajax上傳圖片文件
- Angular Js文件上傳之form-data
- js動(dòng)態(tài)在form上插入enctype=multipart/form-data的問(wèn)題
- NodeJs form-data格式傳輸文件的方法
- Vue axios 將傳遞的json數(shù)據(jù)轉(zhuǎn)為form data的例子
- JS FormData對(duì)象使用方法實(shí)例詳解
相關(guān)文章
JavaScript中window和document用法詳解
這篇文章主要介紹了JavaScript中window和document用法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07
JavaScript 設(shè)計(jì)模式 富有表現(xiàn)力的Javascript(一)
javascript設(shè)計(jì)模式是圖靈出版,學(xué)習(xí)中力求每個(gè)章節(jié)都細(xì)看。2010-05-05
淺談使用splice函數(shù)對(duì)數(shù)組中的元素進(jìn)行刪除時(shí)的注意事項(xiàng)
下面小編就為大家?guī)?lái)一篇淺談使用splice函數(shù)對(duì)數(shù)組中的元素進(jìn)行刪除時(shí)的注意事項(xiàng)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-12-12
原生js操作checkbox用document.getElementById實(shí)現(xiàn)
js操作checkbox本人建議用document.getElementById(checkbox_id).checked不推薦使用jquery操作checkbox,感興趣的朋友不要錯(cuò)過(guò)2013-10-10
微信公眾平臺(tái) 客服接口發(fā)消息的實(shí)現(xiàn)代碼(Java接口開(kāi)發(fā))
這篇文章主要介紹了微信公眾平臺(tái) 客服接口發(fā)消息的實(shí)現(xiàn)代碼(Java接口開(kāi)發(fā)),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2019-04-04
火狐下table中創(chuàng)建form導(dǎo)致兩個(gè)table之間出現(xiàn)空白
js加入form導(dǎo)致兩個(gè)table之間出現(xiàn)空白,還有另一種說(shuō)法在table中創(chuàng)建form表單是不符合DOM標(biāo)準(zhǔn)的,會(huì)導(dǎo)致post失效,以及js數(shù)據(jù)傳輸失效2013-09-09

