亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

Ajax與服務器(JSON)通信實例代碼

2019-11-19 19:03:25
字體:
來源:轉載
供稿:網友

Ajax與服務器(JSON)通信

Ajax這個詞,不代表任何東西,它僅僅是稱呼一系列促進客戶端與服務器通信的技術時所用的一個術語。服務器通信時Ajax技術的核心內容,其目標就是從客戶端向服務器發送信息,并接受后者的回傳,以求在此過程中創建出更好地打用戶體驗來。Ajax之前所有的服務器通信都是在服務器上完成的,所以那是若想重繪頁面的一部分,要么使用iframe(已淘汰),要么刷新整個頁面。這兩種方式都稱不上是良好的用戶體驗。

Ajax提供了兩類服務器通信手段:同步通信和異步通信。

異步通信Ajax比同步通信要常見的多了,大概是98%的使用頻次。異步意味著此類Ajax調用并不和其他任務同時觸發,這種通信行為發生在后臺,具備相當的獨立性,與頁面和web應用程序相互分離。

使用異步調用,可以避免同步調用的阻塞性,它不需要與頁面中的其他HTTP請求擠在一起處理。

XMLHttpRequest對象

XMLHttpRequest對象是所有Ajax調用的核心。我們的目的是使用Ajax技術異步獲取JSON中的數據,并以適當的形式將其展現出來:

//創建ajax通信服務器對象function getHTTPObject(){  "use strict"; //注意使用嚴格模式  var xhr;  //使用主流的XMLHttpRequest通信服務器對象  if(window.XMLHttpRequest){    xhr = new window.XMLHttpRequest();  //如果是老版本ie,則只支持Active對象  } else if(window.ActiveXObject){    xhr = new window.ActiveXObject("Msxml2.XMLHTTP");  }  //將通信服務器對象返回  return xhr;}

跨瀏覽器的兼容問題:微軟Ie起初發明了XMLHttp對象,那就導致了IE5、IE6只支持ActiveXObject對象,所以要考慮對它的兼容問題。

 創建Ajax調用

首先,我在本地的data目錄下創建好了Salad.json文件,等待Ajax程序去調用它:

//ajax JSON Saladvar ingredient = {  "fruit":[    {      "name" : "apple",      "color" : "green"    },    {      "name" : "tomato",      "color" : "red"    },    {      "name" : "peach",      "color" : "pink"    },    {      "name" : "pitaya",      "color" : "white"    },    {      "name" : "lettuce",      "color" : "green"    }  ]};

然后要做的是向服務器發送請求和接受傳回的數據:

在接收到返回的服務器通信對象“xhr”后,我們緊接著要做的是使用readystatechange 事件對通信對象 “xhr”進行 Ajax請求狀態和服務器狀態,當readystate狀態請求完成和status狀態服務器正常時在進行之后 的通信工作。

//輸出ajax調用所返回的json數據var request = getHTTPObject();request.onreadystatechange = function(){  "use strict";    //當readyState全等于“4”狀態,status全等于“200”狀態 代表服務器狀態服務及客戶端請求正常,得以返回  if(request.readyState ===4 || request.status ===200 ){        //為了方便起見,將數據打印到瀏覽器控制臺(F12查看)    console.log(request.responseText);  }    //使用GET方式請求.json數據文件,并且不向服務器發送任何信息  request.open("GET","data/ingredient.json",true);  request.send(null);};

Ajax也通過GET和POST方法進行調用,GET方式會把數據暴露在URL之中,所以它的處理工作較少;POST相對較安全,但性能不如GET。   接下來分別使用 open()和 send()方法對服務器請求數據文件和發送數據。

通常在實際的開發項目中,不可能僅僅有一個Ajax調用。為了復用,為了方便起見,我們需要將這個Ajax程序封裝成復用函數,在這里我傳入了一個outputElement參數,用于給用戶提示等待;還傳入了一個callback參數,用于傳入一個回調函數,根據用戶在搜索框鍵入的關鍵字在JSON文件中進行匹配,將合適的數據渲染到頁面響應的位置:

//將其封裝成一個供調用函數function ajaxCall(dataUrl,outputElement,callback){  "use strict";  //這是一段截取的js(ajax)代碼  var request = getHTTPObject();  //我想要提醒大家的是:當網頁的某個區域在向服務器發送http請求的過程中,要有一個標識提醒用戶正在加載...  outputElement.innerHTML = "Loding..."; //也可以根據各位的需求添加一個循環小動畫  request.onreadystatechange = function () {    if(request.readyState ===4 || request.status ===200){      //將request.responseText返回的數據轉化成JSON格式      var contacts = JSON.parse(request.responseText);            //如果回調函數是function類型,則使用callback函數處理返回的JSON數據      if(callback === "function"){        callback(contacts);      }    }  };  request.open("GET","data/ingredient.json",true);  request.send(null);}

然后調用 ajaxCall():

//調用程序,我們將使用Ajax請求的JSON數據顯示到HTML文檔的某個區域中!(function () {  "use strict";    //下面將給出DOM語句相對應的HTML代碼  var searchForm = document.getElementById("search-form"),    searchField = document.getElementById("q"),    getAllButton = document.getElementById("get-all"),    target = document.getElementById("output");  var search = {    salad : function(event){      var output = document.getElementById("output");        //請求的JSON數據文件名,輸出到HTML的區域,檢索數據文件的核心function語句      ajaxCall('data/ingredient.json','output',function(data){        //searchValue為搜索條目,準備循環檢索        var searchValue = searchField.value,          //找到食材條目(詳見JSON數據文件)          fruit = data.fruit,          //統計水果的數量          count = fruit.length,          i;        //阻止默認行為        event.preventDefault();        //初始化        target.innerHTML = "";        if(count > 0 || searchValue !==""){          for(i = 0;i < count;i++){                        var obj = fruit[i],              //將name與searchvalue值相匹配,如果值不等于 -1,那么就確定兩者相匹配              inItfount = obj.name.indexOf(searchValue);            //將JSON中匹配的數據規范的寫入到DOM            if(isItfount != -1){              target.innerHTML += '<p>'+obj.name+'<a href="mailto:" '+obj.color+'>'+obj.color+'</a></p>'            }          }        }      })    }  };  //事件監聽器,監聽鼠標單擊事件后調用函數并請求JSON數據文件  searchField.addEventListener("click",search.salad,false);  })();

Ajax 所對應的HTML文檔:

<h1>制作沙拉所需要的食材</h1>  <form action="" method="get" id="search-form">    <div class="section">      <label for="q">搜索食材</label>      <input id="q" name="q" required placeholder="type a name">    </div>    <div class="button-group">      <button type="submit" id="btn-search">搜索</button>      <button type="button" id="get-all">get all contacts</button>    </div>  </form>  <div id="output"></div>

感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91视频免费在线| 久久99精品久久久久久琪琪| 国产mv免费观看入口亚洲| 色综合久久精品亚洲国产| 国产精品成人一区| 国产精品夫妻激情| 欧美成人激情图片网| 午夜精品久久17c| 另类少妇人与禽zozz0性伦| 国产ts人妖一区二区三区| 2019中文字幕全在线观看| 亚洲第一精品自拍| 日韩精品免费在线视频观看| 91久久久久久久| 亚洲a成v人在线观看| 日本一区二区三区在线播放| 综合国产在线视频| 国产精品午夜一区二区欲梦| 亚洲欧美激情四射在线日| 97视频人免费观看| 久久精品成人动漫| 91久久综合亚洲鲁鲁五月天| 亚洲免费av电影| 欧美日韩免费在线| 国内外成人免费激情在线视频| 91精品久久久久久久久久| 亚洲欧洲一区二区三区久久| 久久久久久久97| 亚洲美女自拍视频| 国产精品九九九| 中文字幕亚洲自拍| 韩国v欧美v日本v亚洲| 国产成+人+综合+亚洲欧美丁香花| 国产香蕉一区二区三区在线视频| 成人午夜高潮视频| 欧美黑人巨大精品一区二区| 亚洲欧美日韩一区二区三区在线| 精品成人69xx.xyz| 日韩精品在线播放| 国产精品日韩专区| 欧美最猛性xxxxx免费| 最近2019中文字幕第三页视频| 欧美一级bbbbb性bbbb喷潮片| 中文字幕一区二区三区电影| 国产精品偷伦视频免费观看国产| 久久综合久久美利坚合众国| 最近2019年中文视频免费在线观看| 狠狠色香婷婷久久亚洲精品| 久久视频在线观看免费| 91国内揄拍国内精品对白| xx视频.9999.com| 亚洲国产另类 国产精品国产免费| 成人国产精品免费视频| 国产精品爽爽爽爽爽爽在线观看| 久久成人国产精品| 91欧美视频网站| 国产精品稀缺呦系列在线| 亚洲色图50p| 一本色道久久88综合亚洲精品ⅰ| 国产一区二区三区18| 亚洲国产精品久久精品怡红院| 性色av一区二区三区| 亚洲视频专区在线| 亚洲精品日产aⅴ| 亚洲第一免费网站| 亚洲美腿欧美激情另类| 亚洲一区二区三区香蕉| 日本精品免费观看| 亚洲白拍色综合图区| 91视频免费网站| 不卡在线观看电视剧完整版| 日韩黄色在线免费观看| 日韩免费在线电影| 另类美女黄大片| 欧美电影在线观看网站| 国产一区视频在线播放| 亚洲网站在线播放| 亚洲黄页视频免费观看| 欧美乱大交xxxxx| 国模精品视频一区二区三区| 久久精品一区中文字幕| 欧美一二三视频| xxav国产精品美女主播| 国产日韩欧美夫妻视频在线观看| 日韩精品久久久久| 欧美日韩免费看| 91黑丝在线观看| 日韩电影第一页| 日韩在线观看免费全集电视剧网站| 国产99久久精品一区二区| 亚洲第一黄色网| 在线中文字幕日韩| 亚洲综合大片69999| 亚洲人成五月天| 欧美极品少妇xxxxⅹ喷水| 欧美大片免费观看在线观看网站推荐| 成人性生交大片免费看视频直播| 国产精品久久999| 欧美成人性色生活仑片| 久久久在线视频| 久久免费视频在线观看| 日韩成人网免费视频| 日韩欧美在线一区| 日韩av综合网站| 欧美裸身视频免费观看| 在线亚洲国产精品网| 久久久久久成人精品| 狠狠色狠狠色综合日日五| 青青草99啪国产免费| 91探花福利精品国产自产在线| 国产高清视频一区三区| 成人在线播放av| 精品在线小视频| 久久免费视频网站| 性色av一区二区三区在线观看| 欧美福利小视频| 91po在线观看91精品国产性色| 亚洲91精品在线观看| 亚洲成人av在线播放| 国产精品视频自拍| 亚洲成人精品视频在线观看| 亚洲天堂第二页| 亚洲国产小视频| 国产日韩在线亚洲字幕中文| 91免费看视频.| 欧美在线欧美在线| 国产91久久婷婷一区二区| 亚洲精品国产电影| 亚洲高清av在线| 国产精品扒开腿做爽爽爽视频| 久久久免费精品视频| 中文字幕av一区| 91人人爽人人爽人人精88v| 国产精品视频资源| 亚洲精品国产综合久久| 一区二区三区天堂av| 久久久久久久久综合| 日韩欧美精品免费在线| 国产欧美一区二区三区在线看| 日韩欧美一区二区三区久久| 国产日韩精品一区二区| 国产精品国产自产拍高清av水多| 国产主播喷水一区二区| 久久偷看各类女兵18女厕嘘嘘| 亚洲欧美国产精品专区久久| 欧美日韩激情美女| 亚洲午夜国产成人av电影男同| 亚洲欧美国产日韩天堂区| 97人人模人人爽人人喊中文字| 国产精品一香蕉国产线看观看| 国产99久久精品一区二区| 中文字幕av一区二区三区谷原希美| 亚洲一区二区三| 日本最新高清不卡中文字幕| 黑人与娇小精品av专区| 久久精品免费电影| 亚洲一区二区日本| 国产精品国产三级国产aⅴ9色| 伊人久久大香线蕉av一区二区| 中文字幕最新精品| 国产大片精品免费永久看nba| 久久综合五月天| 欧美高清激情视频| 黑人巨大精品欧美一区二区免费|