最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2016年11月04日 14:42:12   作者:畫個女孩陪著我  
本篇文章主要介紹了使用Ajax與服務器(JSON)通信方法,Ajax提供了兩類服務器通信手段:同步通信和異步通信。有需要的可以了解一下。

 Ajax這個詞,不代表任何東西,它僅僅是稱呼一系列促進客戶端與服務器通信的技術時所用的一個術語。服務器通信時Ajax技術的核心內容,其目標就是從客戶端向服務器發(fā)送信息,并接受后者的回傳,以求在此過程中創(chuàng)建出更好地打用戶體驗來。

Ajax之前所有的服務器通信都是在服務器上完成的,所以那是若想重繪頁面的一部分,要么使用iframe(已淘汰),要么刷新整個頁面。這兩種方式都稱不上是良好的用戶體驗。

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

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

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

XMLHttpRequest對象

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

//創(chuàng)建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起初發(fā)明了XMLHttp對象,那就導致了IE5、IE6只支持ActiveXObject對象,所以要考慮對它的兼容問題。

創(chuàng)建Ajax調用

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

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

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

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

//輸出ajax調用所返回的json數據

var request = getHTTPObject();

request.onreadystatechange = function(){

  "use strict";

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

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

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

//將其封裝成一個供調用函數

function ajaxCall(dataUrl,outputElement,callback){
  "use strict";  //這是一段截取的js(ajax)代碼

  var request = getHTTPObject();
  //我想要提醒大家的是:當網頁的某個區(qū)域在向服務器發(fā)送http請求的過程中,要有一個標識提醒用戶正在加載...

  outputElement.innerHTML = "Loding..."; //也可以根據各位的需求添加一個循環(huán)小動畫

  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文檔的某個區(qū)域中!
(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的區(qū)域,檢索數據文件的核心function語句

      ajaxCall('data/ingredient.json','output',function(data){

        //searchValue為搜索條目,準備循環(huán)檢索
        var searchValue = searchField.value,

          //找到食材條目(詳見JSON數據文件)
          fruit = data.fruit,

          //統(tǒng)計水果的數量
          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中匹配的數據規(guī)范的寫入到DOM
            if(isItfount != -1){
              target.innerHTML += '<p>'+obj.name+'<a href="mailto:" '+obj.color+'>'+obj.color+'</a></p>'
            }
          }
        }
      })
    }
  };
  //事件監(jiān)聽器,監(jiān)聽鼠標單擊事件后調用函數并請求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>

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

相關文章

  • Javascript中瀏覽器窗口的基本操作總結

    Javascript中瀏覽器窗口的基本操作總結

    BOM全稱是brower object model(瀏覽器對象模型),主要用于管理窗口及窗口間的通訊,其核心對象是window。說窗口,可能并不準確。因為,有的瀏覽器窗口可能包含多個標簽頁,每個標簽頁都有自己的window對象。本文將詳細介紹這些內容,有需要可以參考學習。
    2016-08-08
  • JS?簡單實現(xiàn)拖拽評星的示例代碼

    JS?簡單實現(xiàn)拖拽評星的示例代碼

    本文主要介紹了JS?簡單實現(xiàn)拖拽評星,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-05-05
  • js+html實現(xiàn)網頁五子棋

    js+html實現(xiàn)網頁五子棋

    這篇文章主要為大家詳細介紹了js+html實現(xiàn)網頁五子棋,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-05-05
  • 將JSON字符串轉換成Map對象的方法

    將JSON字符串轉換成Map對象的方法

    下面小編就為大家?guī)硪黄獙SON字符串轉換成Map對象的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-11-11
  • Bootstrap風格的WPF樣式

    Bootstrap風格的WPF樣式

    此樣式基于bootstrap-3.3.0,樣式文件里的源碼行數都是指的這個版本.這篇文章主要介紹了Bootstrap風格的WPF樣式的相關資料,需要的朋友參考下
    2016-12-12
  • 基于JavaScript編寫一個翻卡游戲

    基于JavaScript編寫一個翻卡游戲

    這篇文章主要為大家詳細介紹了如何溧陽JavaScript編寫一個簡單的翻卡游戲,文中的示例代碼講解詳細,具有一定的借鑒價值,需要的可以參考一下
    2023-02-02
  • JavaScript中代理與反射的用法詳解

    JavaScript中代理與反射的用法詳解

    JavaScript作為一門靈活而強大的語言,提供了代理(Proxy)與反射(Reflect)這兩個元編程工具,它們?yōu)殚_發(fā)者提供了更深層次的語言控制和操作,在本篇博客中,我們將深入研究代理與反射的概念、用法,以及如何巧妙地結合它們來實現(xiàn)高級的編程技巧,需要的朋友可以參考下
    2023-12-12
  • 利用JavaScript為句子加標題的3種方法示例

    利用JavaScript為句子加標題的3種方法示例

    這篇文章主要給大家介紹了關于如何利用JavaScript為句子加標題的3種方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-01-01
  • 使用原生JavaScript實現(xiàn)文字大小自適應的代碼示例

    使用原生JavaScript實現(xiàn)文字大小自適應的代碼示例

    在現(xiàn)代Web開發(fā)中,文字大小自適應是一種常見的需求,尤其是在響應式設計中,通過原生JavaScript實現(xiàn)文字大小的動態(tài)調整,可以確保內容在不同設備和屏幕尺寸下都能保持良好的可讀性和視覺效果,本文將深入探討如何使用原生JavaScript實現(xiàn)文字大小自適應,需要的朋友可以參考下
    2025-02-02
  • input 寬度自適應

    input 寬度自適應

    感謝網友“l(fā)iufabin”提出的關于不支持FF的問題,第一個在FF下經過測試時支持的,第二個中的高度自適應不支持,我在網上找了一個JQUERY的插件
    2009-05-05

最新評論

中山市| 乌拉特后旗| 常熟市| 邻水| 新绛县| 靖江市| 松潘县| 钟山县| 连山| 台北县| 临漳县| 荔波县| 西充县| 资兴市| 屏南县| 龙江县| 大厂| 延庆县| 西充县| 乌拉特前旗| 辉县市| 白城市| 隆子县| 石狮市| 两当县| 丹江口市| 衡水市| 滕州市| 民勤县| 绵竹市| 乌什县| 清水河县| 兴山县| 洛南县| 黑河市| 婺源县| 南郑县| 朔州市| 青州市| 定安县| 鲜城|