JavaScript基礎(chǔ)之AJAX簡(jiǎn)單的小demo
AJAX
AJAX = Asynchronous JavaScript and XML(異步的 JavaScript 和 XML)。
AJAX 不是新的編程語(yǔ)言,而是一種使用現(xiàn)有標(biāo)準(zhǔn)的新方法。
AJAX 是與服務(wù)器交換數(shù)據(jù)并更新部分網(wǎng)頁(yè)的藝術(shù),在不重新加載整個(gè)頁(yè)面的情況下。
function prepareForms() { for(var j=0 ; j<document.forms.length ; j++){ var this_forms = document.forms[j]; resetFields(this_forms); this_forms.onsubmit = function () { if(!validateForm(this)) return false; //進(jìn)行瀏覽器端表單驗(yàn)證 var article = document.getElementsByTagName("article")[0]; if(submitFormWithAjax(this,article)) return false; //代表防止重復(fù)提交 實(shí)際的提交已經(jīng)完成 return true; } } }
首先 通過(guò)表單的提交事件調(diào)用相應(yīng)的驗(yàn)證方法 和ajax提交方法 如果說(shuō)ajax提交成功 返回false 攔截提交事件 如果ajax失敗 則正常提交
function displayAjaxLoading(element) { while(element.hasChildNodes()){ element.removeChild(element.lastChild); //如果還有子節(jié)點(diǎn) 重復(fù)刪除 直到內(nèi)部為空 } var content = document.createElement("img"); content.setAttribute("src","images/loading.gif"); content.setAttribute("alt","loading...."); element.appendChild(content); } //拿到元素 清空內(nèi)部 并添加一個(gè)img function submitFormWithAjax(whichform,thetarget) { var request = getHTTPObject(); if(!request){return false ;} displayAjaxLoading(thetarget);//調(diào)用加載方法 var dataParts = []; var element; //提前創(chuàng)建要用的容器 for(var i=0 ; i<whichform.elements.length ; i++){ element = whichform.elements[i]; dataParts[i] = element.name + "=" +encodeURIComponent(element.value) //把元素的名字和值轉(zhuǎn)化成URL編碼放入容器中 } var data = dataParts.join("&"); //把數(shù)組轉(zhuǎn)化成一串字符串 每個(gè)項(xiàng)目之間用&連接 request.open("post",whichform.getAttribute("action"),true); //向表單目標(biāo)地址準(zhǔn)備提出名為post的請(qǐng)求 request.setRequestHeader("content-type","application/x-www-form-urlencoded");//設(shè)置頭部信息 //獲取請(qǐng)求后就會(huì)調(diào)用一下的 方法 算是一個(gè)觸發(fā)器 服務(wù)器會(huì)執(zhí)行以下內(nèi)容 request.onreadystatechange = function () { if(request.readyState == 4){ if(request.status == 200 || request.status == 0){ var matches = request.responseText.match(/<article>([\s\S]+)<\/article>/) //捕獲文本 if(matches.length>0){ thetarget.innerHTML = matches[1]; //正則表達(dá)式返回0為包含<article> 1為不包含的版本 } else { thetarget.innerHTML = "<p>sorry not find</p>"; } } else { thetarget.innerHTML = "<p>" + request.statusText + "</p>"; } } } request.send(data); //對(duì)目標(biāo)服務(wù)器發(fā)送請(qǐng)求 return true;//代表函數(shù)執(zhí)行完畢 }
讓我們分步來(lái)查看具體做了什么事情
第一 獲取了一個(gè)請(qǐng)求對(duì)象
第二 調(diào)用display方法 讓頁(yè)面刪除article下的所有元素并放上load動(dòng)畫(huà)
第三 創(chuàng)建URL編碼的請(qǐng)求 用數(shù)組存放 一項(xiàng)里面為name和被URL轉(zhuǎn)義的value 然后把他每項(xiàng)通過(guò)&連接 組成一個(gè)完整的字符串
第四 設(shè)置了請(qǐng)求的基本屬性 比如命名 目標(biāo)地址 頭文件
第五 創(chuàng)建一個(gè)監(jiān)聽(tīng)程序 監(jiān)聽(tīng)請(qǐng)求 如果成功則把響應(yīng)的html填入到目標(biāo)article中
第六 正式發(fā)送請(qǐng)求 成功返回ture
以上所述是小編給大家介紹的JavaScript基礎(chǔ) AJAX簡(jiǎn)單的小demo ,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)歡迎給我留言,小編會(huì)及時(shí)回復(fù)大家的!
- Javascript中數(shù)組去重與拍平的方法示例
- 理解javascript中的Function.prototype.bind的方法
- JavaScript數(shù)組復(fù)制詳解
- Javascript基礎(chǔ)回顧之(三) js面向?qū)ο?/a>
- Javascript基礎(chǔ)回顧之(一) 類型
- JavaScript Date 知識(shí)淺析
- JavaScript實(shí)現(xiàn)時(shí)鐘滴答聲效果
- Javascript中 帶名 匿名 箭頭函數(shù)的重要區(qū)別(推薦)
- javascript判斷回文數(shù)詳解及實(shí)現(xiàn)代碼
- 淺談javascript中的 “ && ” 和 “ || ”
- Javascript中的 “&” 和 “|” 詳解
相關(guān)文章
基于javascript 顯式轉(zhuǎn)換與隱式轉(zhuǎn)換(詳解)
下面小編就為大家分享一篇基于javascript 顯式轉(zhuǎn)換與隱式轉(zhuǎn)換(詳解),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2017-12-12利用threejs實(shí)現(xiàn)一個(gè)簡(jiǎn)易的泊車功能
這篇文章主要為大家詳細(xì)介紹了如何利用threejs實(shí)現(xiàn)一個(gè)簡(jiǎn)易的泊車功能,文中的示例代碼講解詳細(xì),對(duì)大家的學(xué)習(xí)和工作有一定的幫助,感興趣的小伙伴可以動(dòng)手嘗試一下2024-01-01JavaScript實(shí)現(xiàn)下拉菜單的顯示隱藏
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)下拉菜單的顯示隱藏,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09uniapp-路由uni-simple-router安裝配置教程
專為uniapp打造的路由器,和uniapp深度集成,uniapp用到了很多vue的api,但在路由管理的功能相對(duì)于vue-router還是比較欠缺的,比如全局導(dǎo)航守衛(wèi),本文給大家講解uniapp-路由uni-simple-router相關(guān)知識(shí),感興趣的朋友跟隨小編一起看看吧2022-11-11javascript異常處理實(shí)現(xiàn)原理詳解
這篇文章主要介紹了javascript異常處理實(shí)現(xiàn)原理詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-02-02