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

首頁 > 編程 > JavaScript > 正文

使用Ajax與服務器(JSON)通信實例

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

 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精品国产91久久久久久吃药| 国产成人精品综合久久久| 日韩成人高清在线| 中文字幕亚洲专区| 欧美一区二区三区图| 午夜精品视频网站| 日韩亚洲综合在线| 亚洲第一天堂无码专区| 亚洲香蕉av在线一区二区三区| 米奇精品一区二区三区在线观看| 欧美黑人狂野猛交老妇| 精品无码久久久久久国产| 国产精品久久久久久久久久99| 乱亲女秽乱长久久久| 欧美日韩一区二区免费在线观看| 国产欧美日韩丝袜精品一区| 中文字幕成人精品久久不卡| 欧美午夜xxx| 国产视频精品va久久久久久| 国产精品久久久久久久久久新婚| 欧美黑人一级爽快片淫片高清| 亚洲午夜久久久影院| 日韩大片在线观看视频| 91老司机精品视频| 久久久久成人网| www国产精品视频| 国产日产久久高清欧美一区| 国产视频在线观看一区二区| 69影院欧美专区视频| 成人久久18免费网站图片| 欧美黑人性视频| 最新国产精品亚洲| 成人av.网址在线网站| 国产精品自拍偷拍| 欧美大片大片在线播放| 岛国av一区二区| 久久亚洲一区二区三区四区五区高| 91精品国产综合久久香蕉| 亚洲成人久久电影| 亚洲bt天天射| 亚洲日本欧美日韩高观看| 亚洲码在线观看| 97精品伊人久久久大香线蕉| 久久影院中文字幕| 欧美性视频精品| 欧美日韩人人澡狠狠躁视频| 欧美精品第一页在线播放| 精品中文字幕在线| 欧美激情日韩图片| 亚洲少妇激情视频| 欧美性生活大片免费观看网址| 亚洲国产成人av在线| 欧美做受高潮1| 91免费看片在线| 粉嫩老牛aⅴ一区二区三区| 亚洲国模精品一区| 伦伦影院午夜日韩欧美限制| 欧美日韩免费在线| 久久久午夜视频| 北条麻妃久久精品| 一区二区日韩精品| 日韩av理论片| 91久久精品日日躁夜夜躁国产| 国产精品夜色7777狼人| 久久最新资源网| 午夜精品福利在线观看| 97国产成人精品视频| 亚洲精品久久久久久久久| 91亚洲精品久久久| 91大神在线播放精品| 欧洲午夜精品久久久| 国产伦精品一区二区三区精品视频| 国产成人综合亚洲| 亚州国产精品久久久| 国产亚洲激情在线| 91天堂在线视频| 26uuu另类亚洲欧美日本一| 欧美日韩不卡合集视频| 在线午夜精品自拍| 亚洲激情视频网站| 久久亚洲私人国产精品va| 热久久免费国产视频| 狠狠做深爱婷婷久久综合一区| 欧美成人午夜免费视在线看片| 国产成人高清激情视频在线观看| 成人免费黄色网| 久久久欧美精品| 亚洲大胆人体在线| 国产脚交av在线一区二区| 亚洲欧美成人一区二区在线电影| 久久综合免费视频| 另类图片亚洲另类| 91视频免费网站| 久久综合九色九九| 久久久国产视频| 欧美一区二区三区艳史| 国产精品www色诱视频| 久久精品国产清自在天天线| 欧美亚州一区二区三区| 欧美视频一二三| 欧美成人精品h版在线观看| 激情av一区二区| 欧美日韩国产第一页| 国产欧美韩国高清| 亚洲欧洲在线观看| 日韩美女在线看| 成人黄色av网站| 亚洲综合中文字幕在线| 91免费精品视频| 成人午夜小视频| 在线视频中文亚洲| 精品国产自在精品国产浪潮| 色吧影院999| 成人av.网址在线网站| 欧美成人手机在线| 欧美精品在线免费| 海角国产乱辈乱精品视频| 久久久久国色av免费观看性色| 精品电影在线观看| 欧美肥臀大乳一区二区免费视频| 欧美成人午夜视频| 亚洲影院色无极综合| 欧美激情亚洲综合一区| 久久久久久久电影一区| 国产精品极品尤物在线观看| 国产精品久久久久久av福利| 国产精品网红福利| 日韩精品免费在线视频| 久久久亚洲网站| 岛国av一区二区在线在线观看| 日韩av一卡二卡| 日韩经典一区二区三区| 亚洲毛片在线看| 亚洲最大成人免费视频| 国产亚洲免费的视频看| 国产亚洲激情视频在线| 97超级碰碰人国产在线观看| 午夜精品福利视频| 国产精品69久久久久| 88国产精品欧美一区二区三区| 亚洲性猛交xxxxwww| 国产一区视频在线播放| 91大神在线播放精品| 亚洲国产小视频| 日韩中文字幕国产精品| 欧美激情久久久久| 麻豆乱码国产一区二区三区| 精品视频偷偷看在线观看| 欧美午夜片在线免费观看| 欧美在线一区二区视频| 亚洲一区二区三区香蕉| 亚洲 日韩 国产第一| 亚洲欧美日韩成人| 国产午夜精品美女视频明星a级| 色中色综合影院手机版在线观看| 亚洲国产精品网站| www.日韩欧美| 久久精品小视频| 欧美午夜视频在线观看| 91久久久久久国产精品| 国产精品视频免费观看www| 午夜剧场成人观在线视频免费观看| 日韩有码视频在线|