麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 編程 > 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>

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 亚洲午夜影院在线观看 | 欧美毛片在线观看 | 毛片毛片免费看 | 一本色道精品久久一区二区三区 | 欧美日韩大片在线观看 | 免费毛片儿 | 国产精品99久久久久久宅女 | 精品一区二区亚洲 | 国产成年人视频网站 | 国产精品啪一品二区三区粉嫩 | 182tv成人福利视频免费看 | 国产视频在线一区 | 黄在线观看在线播放720p | 舌头伸进添的我好爽高潮网站 | 性生活视频一级 | 久久精品一级片 | 777zyz色资源站在线观看 | 91一级毛片 | av在线免费观看中文字幕 | 色婷婷久久一区二区 | 视频一区二区久久 | 久久久久二区 | 在线看免费观看av | 毛片网站视频 | 欧产日产国产精品乱噜噜 | 成年人在线视频 | 成人在线视频国产 | 姑娘第四集免费看视频 | 在线看国产视频 | japanesexxxx24videofree | 久久久久久久久久久国产精品 | 久章草影院 | 91九色蝌蚪国产 | 国产在线区| 视频在线中文字幕 | 欧美a视频在线观看 | 羞羞答答影院 | 北原夏美av | 看免费的毛片 | 欧美日韩国产一区二区三区在线观看 | 三级国产三级在线 |