beego獲取ajax數(shù)據(jù)的實(shí)例
1. 什么是AJAX
Asynchronous JavaScript And XML(異步 JavaScript 及 XML),是指一種創(chuàng)建交互式網(wǎng)頁(yè)應(yīng)用的網(wǎng)頁(yè)開(kāi)發(fā)技術(shù)
Ajax 是一種在無(wú)需重新加載整個(gè)網(wǎng)頁(yè)的情況下,能夠更新部分網(wǎng)頁(yè)的技術(shù)。
2. 如何使用 AJAX
XMLHttpRequest 是 AJAX 的基礎(chǔ)。
XMLHttpRequest 用于在后臺(tái)與服務(wù)器交換數(shù)據(jù)。這意味著可以在不重新加載整個(gè)網(wǎng)頁(yè)的情況下,對(duì)網(wǎng)頁(yè)的某部分進(jìn)行更新。
使用AJAX大致分四步
1. 創(chuàng)建XMLHttpRequest 對(duì)象
//js代碼獲取XMLHttpRequest 對(duì)象(保存為util.js) function getXmlHttpRequest() { var xhr; try { // Firefox, Opera 8.0+, Safari xhr = new XMLHttpRequest(); } catch (e) { // Internet Explorer try { xhr = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { xhr = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { alert("您的瀏覽器不支持AJAX!"); return false; } } } return xhr; }
2.注冊(cè)狀態(tài)回調(diào)函數(shù)(當(dāng)XMLHttpRequest 對(duì)象的readyState每次發(fā)生變化時(shí)調(diào)用該回調(diào)函數(shù))
//當(dāng)xhr.readyState == 4時(shí)所有的步驟都已執(zhí)行完畢 //當(dāng)xhr.state == 200時(shí)表示已經(jīng)正確執(zhí)行 xhr.onreadystatechange=function(){ if(xhr.readyState == 4 && xhr.state == 200){ alter("請(qǐng)求已全部執(zhí)行,并且成功"); } }
3.建立與服務(wù)器的異步連接(默認(rèn)為異步)
/** open(method,url,async)方法 規(guī)定請(qǐng)求的類型、URL 以及是否異步處理請(qǐng)求。 method:請(qǐng)求的類型;GET 或 POST url:相求處理請(qǐng)求的url async:true(異步)或 false(同步) 通過(guò)time來(lái)保證,每次發(fā)送新的請(qǐng)求 */ xhr.open("Post", "/detailsU?time=" + new Date().getTime());
4.發(fā)出異步請(qǐng)求
/** send方法中發(fā)送json格式的字符串 */ xhr.send('{"Index":"'+index +'", "Change":"' + i +'"}');
通過(guò)以上四步就可以成功的發(fā)送請(qǐng)求了
附源碼:
{{range .PhoneDetails}} <tr onclick="func1(this)"> <th>{{.Id}}</th> <th>{{.Name}}</th> <th>{{.Price}}</th> <th>{{.Repertory}}</th> <th> <a href="">編輯 </th> <script type="text/javascript" src="/static/js/util.js"></script> <script type="text/javascript"> function func1(x) { var code = prompt("請(qǐng)輸入調(diào)整的庫(kù)存大?。?); if(code != null && code != "") { var i = parseInt(code); if(isNaN(i)) { alert('輸入錯(cuò)誤'); } else { var xhr = getXmlHttpRequest(); xhr.onreadystatechange = function() { if(xhr.readyState == 4 && xhr.state == 200) { alter("請(qǐng)求已全部執(zhí)行,并且成功"); } } var index = x.rowIndex; xhr.open("Post", "/detailsU?time=" + new Date().getTime()); xhr.send('{"Index":"' + index + '", "Change":"' + i + '"}'); alert('修改成功'); } } else { alert('輸入錯(cuò)誤'); } } </script> </tr> {{end}}
3. 在beego中處理AJAX的請(qǐng)求
1. 首先在models層的models.go中創(chuàng)建數(shù)據(jù)的結(jié)構(gòu)
/** 要與傳過(guò)來(lái)的json格式字符串對(duì)應(yīng) '{"Index":"'+index +'", "Change":"' + i +'"}' */ type Object struct { Index string Change string }
2. 注冊(cè)相應(yīng)的路由
/** 在main.go當(dāng)中注冊(cè)相應(yīng)的路由(注意與對(duì)應(yīng)路由設(shè)置好) xhr.open("Post", "/detailsU?time=" + new Date().getTime()); "Post:DoUpdate"用來(lái)注冊(cè)當(dāng)Post方法請(qǐng)求該URL處理的函數(shù) */ beego.Router("/detailsU", &controllers.DetailController{}, "Post:DoUpdate")
3. 在controller中寫(xiě)好相應(yīng)的處理函數(shù)
/** 在對(duì)應(yīng)的函數(shù)中處理相應(yīng)的請(qǐng)求 json.Unmarshal(this.Ctx.Input.RequestBody, ob) 通過(guò)json來(lái)解析穿過(guò)來(lái)的數(shù)據(jù),并將數(shù)據(jù)存儲(chǔ)在ob對(duì)象中 在app.conf中設(shè)置copyrequestbody = true */ func (this *DetailController) DoUpdate(){ ob := &models.Object{} json.Unmarshal(this.Ctx.Input.RequestBody, ob) db, err := sql.Open("mysql", "用戶名:密碼@tcp(IP:3306)/數(shù)據(jù)庫(kù)名") result, err := db.Exec("UPDATE 數(shù)據(jù)表名 SET 字段= ? WHERE id = ?",ob.Change, ob.Index) if err != nil{ beego.Error(err) return }else{ fmt.Println(result) } }
以上這篇beego獲取ajax數(shù)據(jù)的實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Go語(yǔ)言定時(shí)任務(wù)的實(shí)現(xiàn)示例
本文主要介紹了Go語(yǔ)言定時(shí)任務(wù)的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2023-05-05Golang中struct{}和struct{}{}的區(qū)別解析
這篇文章主要介紹了Golang中struct{}和struct{}{}的區(qū)別,通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03Go語(yǔ)言實(shí)現(xiàn)牛頓法求平方根函數(shù)的案例
這篇文章主要介紹了Go語(yǔ)言實(shí)現(xiàn)牛頓法求平方根函數(shù)的案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12golang實(shí)現(xiàn)圖像驗(yàn)證碼的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何利用golang實(shí)現(xiàn)簡(jiǎn)單的圖像驗(yàn)證碼,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-10-10Go語(yǔ)言range關(guān)鍵字循環(huán)時(shí)的坑
今天小編就為大家分享一篇關(guān)于Go語(yǔ)言range關(guān)鍵字循環(huán)時(shí)的坑,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-03-03Golang使用singleflight解決并發(fā)重復(fù)請(qǐng)求
高并發(fā)的場(chǎng)景下,經(jīng)常會(huì)出現(xiàn)并發(fā)重復(fù)請(qǐng)求資源的情況,singleflight是golang內(nèi)置的一個(gè)包,這個(gè)包提供了對(duì)重復(fù)函數(shù)調(diào)用的抑制功能,所以下面我們就來(lái)看看如何使用它解決并發(fā)重復(fù)請(qǐng)求吧2023-08-08golang并發(fā)安全及讀寫(xiě)互斥鎖的示例分析
這篇文章主要為大家介紹了golang并發(fā)安全及讀寫(xiě)互斥鎖的示例分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪2022-04-04go語(yǔ)言的工作空間和GOPATH環(huán)境變量介紹
這篇文章主要介紹了go語(yǔ)言的工作空間和GOPATH環(huán)境變量介紹,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-12-12Golang 實(shí)現(xiàn)interface類型轉(zhuǎn)string類型
這篇文章主要介紹了Golang 實(shí)現(xiàn)interface類型轉(zhuǎn)string類型的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2021-04-04