javascript
JavaScript---Ajax和函数回调,异步编程
一 Ajax 函數(shù)的定義 ?:??Asynchronous JavaScript and XML(異步的 JavaScript 和 XML),無刷新的從服務器讀取數(shù)據(jù),可以在不重新加載整個網(wǎng)頁的情況下,對網(wǎng)頁的某部分進行更新,使網(wǎng)頁實現(xiàn)異步更新。
交換過程:
1 創(chuàng)建對象
2 建立連接
3 發(fā)送請求
4 接收數(shù)據(jù)( 調(diào)用回調(diào)函數(shù))
1 function ajax(json){ 2 if(!json.url){return;} 3 json = json||{}; 4 json.type = json.type||'GET'; 5 json.data = json.data||{}; 6 json.timeout = json.timeout||10000; 7 //1.創(chuàng)建對象 8 if(window.XMLHttpRequest){ 9 //chrome FF IE7+ 10 var oAjax = new XMLHttpRequest(); 11 }else{ 12 //IE低版本 13 var oAjax = new ActiveXObject('Microsoft.XMLHTTP'); 14 } 15 switch(json.type.toLowerCase()){ 16 case 'get': 17 //2.建立連接 //是否異步 18 oAjax.open('GET',json.url+'?'+json2url(json.data),true); 19 //3.發(fā)送 20 oAjax.send(); 21 break; 22 case 'post': 23 oAjax.open('POST',json.url,true); 24 oAjax.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); 25 oAjax.send(json2url(json.data)); 26 break; 27 } 28 json.loading&&json.loading(); 29 //超過json.timeout 后認為失敗 不在請求 30 var timer = setTimeout(function(){ 31 json.error&&json.error(); 32 json.complete&&json.complete(); 33 oAjax.onreadystatechange = null; 34 },json.timeout); 35 36 //4.接收 37 //當網(wǎng)絡狀態(tài)改變的時候 38 oAjax.onreadystatechange = function(){ //每當 readyState 改變時,就會觸發(fā) onreadystatechange 事件 39 //網(wǎng)絡狀態(tài) 40 if(oAjax.readyState == 4){ //0: 請求未初始化 1: 服務器連接已建立 2: 請求已接收 3: 請求處理中 4: 請求已完成,且響應已就緒 41 //http狀態(tài) 42 if(oAjax.status>=200&&oAjax.status<300||oAjax.status==304){ 43 //服務器返回的數(shù)據(jù) 44 clearTimeout(timer); 45 json.success&&json.success(oAjax.responseText); //執(zhí)行回調(diào)函數(shù) 46 json.complete&&json.complete(); 47 }else{ 48 clearTimeout(timer); 49 json.error&&json.error(oAjax.status); 50 json.complete&&json.complete(); 51 } 52 } 53 }; 54 }二,Ajax的調(diào)用:
1 ajax({ 2 url:url, 3 data:{ 4 //數(shù)據(jù)接口 7 }, 8 success:function(str){ 10 var json = eval('('+str+')'); 11 if(!json.error){ 12 alert('發(fā)表成功'); 13 //成功之后運行的代碼18 } 19 } 20 });三 ,異步和回調(diào)函數(shù)
參考連接 :?http://www.ruanyifeng.com/blog/2012/12/asynchronous%EF%BC%BFjavascript.html
異步編程:?同步模式:后一個任務等待前一個任務結(jié)束,然后再執(zhí)行,程序的執(zhí)行順序與任務的排列順序是一致的、同步的
"異步模式":每一個任務有一個或多個回調(diào)函數(shù)(callback),前一個任務結(jié)束后,不是執(zhí)行后一個任務,而是執(zhí)行回調(diào)函數(shù),后一個任務則是不等前一個任務結(jié)束就執(zhí)行,所以程序的執(zhí)行順序與任務的排列順序是不一致的、異步的。
異步編程的方法:
回調(diào)函數(shù):把一個函數(shù)f1作為參數(shù)傳遞給另一個函數(shù)f2,并在f2中在恰當?shù)臅r機執(zhí)行,這個f1就叫回調(diào)函數(shù),常見的比如事件函數(shù),定時器,ajax。
事件監(jiān)聽:任務的執(zhí)行不取決于代碼的順序,而取決于某個事件是否發(fā)生。
轉(zhuǎn)載于:https://www.cnblogs.com/bugda/p/6080656.html
總結(jié)
以上是生活随笔為你收集整理的JavaScript---Ajax和函数回调,异步编程的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: sql 创建随机数
- 下一篇: Spring框架学习笔记(2)——IOC