使用Ajax与服务器(JSON)通信实例

 更新时间:2016年11月04日 14:42:12   作者:画个女孩陪着我  
本篇文章主要介绍了使用Ajax与服务器(JSON)通信方法,Ajax提供了两类服务器通信手段:同步通信和异步通信。有需要的可以了解一下。

 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 Salad
var 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>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • 浅谈ES6中箭头函数与普通函数的区别

    浅谈ES6中箭头函数与普通函数的区别

    箭头函数是ES6中一种新的函数的表达式,本文就来介绍一下ES6中箭头函数与普通函数的区别,非常具有实用价值,需要的朋友可以参考下
    2023-05-05
  • HBuilderX开发一个简单的微信小程序的实现步骤

    HBuilderX开发一个简单的微信小程序的实现步骤

    本文主要介绍了HBuilderX开发一个简单的微信小程序的实现步骤,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • JavaScrip如何安全使用Payment Request API详解

    JavaScrip如何安全使用Payment Request API详解

    这篇文章主要为大家介绍了JavaScrip如何安全使用Payment Request API详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • 微信小程序图片上传组件实现图片拖拽排序

    微信小程序图片上传组件实现图片拖拽排序

    最近在写小程序过程中遇到一个拖拽排序需求,上网一顿搜索未果,遂自行实现,下面这篇文章主要给大家介绍了关于微信小程序图片上传组件实现图片拖拽排序的相关资料,需要的朋友可以参考下
    2022-03-03
  • javascript表单正则应用

    javascript表单正则应用

    这篇文章主要为大家详细介绍了javascript表单正则应用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-02-02
  • 直接拿来用的页面跳转进度条JS实现

    直接拿来用的页面跳转进度条JS实现

    这篇文章主要为大家分享了一款直接拿来用的页面跳转进度条,由javascript实现,可以直接跳转到相应页面,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-01-01
  • JS回调函数简单易懂的入门实例分析

    JS回调函数简单易懂的入门实例分析

    这篇文章主要介绍了JS回调函数,结合简单实例形式分析了javascript回调函数的概念、原理、相关操作技巧与使用注意事项,需要的朋友可以参考下
    2019-09-09
  • js时间戳和c#时间戳互转方法(推荐)

    js时间戳和c#时间戳互转方法(推荐)

    下面小编就为大家带来一篇js时间戳和c#时间戳互转方法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-02-02
  • JavaScript callback回调函数用法实例分析

    JavaScript callback回调函数用法实例分析

    这篇文章主要介绍了JavaScript callback回调函数用法,结合实例形式分析了callback回调函数的概念、功能、应用场景及相关使用技巧,需要的朋友可以参考下
    2018-05-05
  • js通过googleAIP翻译PHP系统的语言配置的实现代码

    js通过googleAIP翻译PHP系统的语言配置的实现代码

    一同事弄了个系统是php写的,虽然是多语言但没中文!他打算手动翻译2000多个语言配置,真是佩服,知道后想了想,应该有好的法办
    2011-10-10

最新评论