AJAX是什么?

  是Asynchronous Javascript And XML的首字母的缩写, 它不是一门的新的语言,而是对现有技术的综合利用。 其本质是在HTTP协议的基础上以异步的方式与服务器进行通信。

异步的概念?

  指某段程序执行时不会阻塞其它程序执行,其表现形式为程序的执行顺序不依赖程序本身的书写顺序,相反则为同步。

异步的作用?

  其优势在于不阻塞程序的执行,从而提升整体执行效率。

AJAX的核心?

  XMLHTTPRequest,简写XHR,Xml可扩展标记语言,Http超文本传输协议,Request请求。XMLHttpRequest对象可以在不向服务器提交整个页面的情况下,实现局部更新网页。XMLHttpRequest 对象提供了对 HTTP 协议的完全的访问,包括做出 POST 和 HEAD 请求以及普通的 GET 请求的能力。XMLHttpRequest 可以同步或异步返回 Web 服务器的响应,并且能以文本或者一个 DOM 文档形式返回内容。它可以接收任何形式的文本文档,是 AJAX 的 Web 应用程序架构的一项关键功能。

  前文说到XMLHTTPRequest可以接收任何形式的文档,那么就不得不提到在网络传输中常用的两个数据格式。

两种常用的数据格式XML和JSON?

XML:

  XML的定义:可扩展标记语言,是一种用于标记电子文件使其具有结构性的标记语言。

  XML的规范

    1、必须有一个根元素
    2、不可有空格、不可以数字或.开头、大小写敏感
    3、不可交叉嵌套
    4、属性双引号(浏览器自动修正成双引号了)
    5、特殊符号要使用实体
    6、注释和HTML一样
    虽然可以描述和传输复杂数据,但是其解析过于复杂并且体积较大,所以实现开发已经很少使用了。

  XML使用步骤简述

    由于XML是DOM对象,可以直接DOM方法,

    1、var xml=xhr.responseXML;获取XML(PHP给的接口)

    2、var items=xml.querySelector('item');获取xml的文档结构

    3、字符串拼接

      3.1、初始化var html='';

      3.2、遍历for(){获取数据var item=item[i],}拼接html+='标签+数据'

    4、渲染document.querySelector('tbody').innerHTHML=html

 JSON:

  JSON定义:JavaScript Object Notation,另一种轻量级的文本数据交换格式,独立于语言。

  JSON的规范:

    1、数据在名称/值对中
    2、数据由逗号分隔(最后一个健/值对不能带逗号)
    3、花括号保存对象方括号保存数组
    4、使用双引号

  JSON的跨语言解析:

    JSON数据在不同语言进行传输时,类型为字符串,不同的语言各自也都对应有解析方法,需要解析完成后才能读取。

    1、PHP解析方法

      数组转json字符 json_encode->$json_array = json_encode($array);

      json字符转成数组 json_decode->$array_json = json_decode($json_array);

    2、Javascript 解析方法

      字符串转对象parse->var jsonObj=JSON.parse(jsonStr);

      对象转字符串stringify->var jsonStr=JSON.stringify(jsonObj);

  tips:JSON兼容处理引用json2.js

XMLHttpRequest中的事件监听onreadystatechange?

  onreadystatechange中两条重要的信息:1.states 2.readyState;

  **状态码states**
   200:代表成功
   304:文档未修改
   403:没有权限
   404:未找到
   500:服务器错误

  **readyState**
   0:var请求未初始化(还没有调用 open())。
   1:open请求已经建立,但是还没有发送(还没有调用 send())。
   2:send请求已发送,正在处理中(通常现在可以从响应中获取内容头)。
   3:请求在处理中;通常响应中已有部分数据可用了,但是服务器还没有完成响应的生成。
   4:响应已完成;您可以获取并使用服务器的响应了。

  另外还有一些API,简述一下,有兴趣的同学可以自行百度:

    xhr.open() 发起请求,可以是get、post方式

    xhr.setRequestHeader() 设置请求头

    xhr.send() 发送请求主体get方式使用xhr.send(null)

    xhr.onreadystatechange = function () {} 监听响应状态

    xhr.status表示响应码,如200

    xhr.statusText表示响应信息,如OK

    xhr.getAllResponseHeaders() 获取全部响应头信息

    xhr.getResponseHeader('key') 获取指定头信息

    xhr.responseText、xhr.responseXML都表示响应主体

接下来简述一下用原生js来编写AJAX,利用类似JQuery的方法,这样可以尽快的理解JQuery的AJAX封装

(以下内容中不是完整代码,仅是步骤思路)

1.封装ajax函数

  window.$={};

  $.ajax=function(options){};

2.定义参数

  if(!options){return false}  //如果没有传参,则退出

  var type=options.type||"get";  //设置type为options对象属性,不传参则默认get

  var url=options.url||location.pathname  //设置url为options对象属性,不传参则默认相对路径

  var async=options.async===false?false:true;  //设置async为options对象属性,并强制asycn只能选true(同步)和false(异步)

  var data=options.data||{}  //设置data为options对象属性,不传参则默认空

    例如:      

      data:{name:"张三",age:"18"}

      这种格式后台不认识,需要转换成name=&age=格式(对应JQ中serialize方法)    

      var dataStr="";
      for (var key in data){dataStr+=key+"="+data[key]+"&"}
      dataStr=dataStr&&dataStr.slice(0,-1);  //如果有数据则剪掉最后一个&

3.ajax编程

  3.1初始化

    var xhr=new XMLHttpRequest();

  3.2请求行

    xhr.open(type,type=='get'?url+'?'+dataStr:url,async);  //如果是get,则需要在url后拼接数据,是post则不用

  3.3请求头

    if (type=='post') {xhr.setRequestHeader('Content-Type','application/x-www-form-urlencoded');}  //如果是post则需要写固定格式,是get则不用

  3.4请求主体

    xhr.send(type=='get'?null:dataStr);  //如果是post则需要传数据,是get则传null

  3.5监听响应状态

    xhr.onreadystatechange=function(){}

    3.5.1响应成功(处理success函数)  

      if(xhr.readyState==4&&xhr.status==200){}  //1、获取状态行(包括状态码&状态信息)

      var result="";  //空字符串,接收数据

      var contentType=xhr.getResponseHeaderr('Content-Type');  //2、获取响应头  

      //3.以下为响应主体

      if(contentType.indexOf("xml")>-1) {    //后台返回的是xml数据格式,xml格式就是DOM对象
        result=xhr.responseXML
      } 

      else if (contentType.indexOf("json")>-1) {  //后台返回的是json数据格式,格式转换成json对象
        var str=xhr.responseText;
        result=JSON.parse(str);
      }

      else{result=xhr.responseText}  //后台返回的是对象
      options.success&&options.success(result)  //设置success为options对象的函数,并把后台的数据对象result传入

    3.5.2响应失败(处理error函数)

      else{options.error&&options.error("request fail code"+xhr.status)}  //设置error为options对象的函数,并提示状态码错误

未完待续...2016-08-13  22:54:40

AJAX应用中必须要掌握的知识!的更多相关文章

  1. js进阶 14-1 jquery的ajax系列中的load方法的作用是什么

    js进阶 14-1 jquery的ajax系列中的load方法的作用是什么 一.总结 一句话总结:jQuery load()方法作用是从服务器加载数据,是一个简单但强大的AJAX方法. 1.load函 ...

  2. Ajax开发中服务端Response的Content-Type

    转自http://www.cnblogs.com/hyl8218/archive/2010/03/10/1681484.html ajax开发中在请求服务器端的响应时, 对于每一种返回类型 规范的做法 ...

  3. Ajax请求中的Redirect()

    页面中有一个IsLogin()方法,用以判断该请求的触发者是否登录,如果登录了,则执行查询操作,如果没有登录,则Redirect()至登录界面 页面使用了较多的Ajax请求来获取数据,而在Ajax请求 ...

  4. Ajax编程中,经常要能动态的改变界面元素的样式

    在Ajax编程中,经常要能动态的改变界面元素的样式,可以通过对象的style属性来改变,比如要改变背景色为红色,可以这样写:element.style.backgroundColor=”#ff0000 ...

  5. Java中实现异常处理的基础知识

    Java中实现异常处理的基础知识 异常 (Exception):发生于程序执行期间,表明出现了一个非法的运行状况.许多JDK中的方法在检测到非法情况时,都会抛出一个异常对象. 例如:数组越界和被0除. ...

  6. C#中位、字节等知识

    本文介绍C#中位.字节等知识. 1. 位(bit) 位(bit)有叫做比特,指二进制中的一位,是二进制的最小信息单位. bit也被称作小b,用b表示. 2. 字节(bytes) 8位表示一个字节. 由 ...

  7. 【转】Ext.ajax.request 中的success和failure

    原文链接:Ext.ajax.request 中的success和failure Ajax request对象的success事件表示request过程中没有发生错误,和自己的业务逻辑无关, 如果访问不 ...

  8. ajax请求中设置特殊的RequestHeader

    现在ajax应用已经相当广泛了,有很多不错的ajax框架可供使用.ajax是一个异步请求,也主要是一种客户端的脚本行为.那么,如何在请求之前为请求添加特殊的一些头部信息呢? 下面是一个简单的例子,我用 ...

  9. php中AJAX请求中使用post和get请求的区别

    之前使用这两个请求的时候,主要从几个方面考虑: 1.语义,get就是从服务器获取,一般就是获取/查询资源信息.post就是提交给服务器,一般就是更新资源信息. 2.请求文件大小,get一般只有2k这样 ...

随机推荐

  1. hdu 5623 KK's Number(dp)

    问题描述 我们可爱的KK有一个有趣的数学游戏:这个游戏需要两个人,有N\left(1\leq N\leq 5*{10}^{4} \right)N(1≤N≤5∗10​4​​)个数,每次KK都会先拿数.每 ...

  2. UVA10869 - Brownie Points II(线段树)

    UVA10869 - Brownie Points II(线段树) 题目链接 题目大意:平面上有n个点,Stan和Ollie在玩游戏,游戏规则是:Stan先画一条竖直的线作为y轴,条件是必需要经过这个 ...

  3. PAT A 1065. A+B and C (64bit) (20)

    题目 Given three integers A, B and C in [-263, 263], you are supposed to tell whether A+B > C. Inpu ...

  4. JSP简介

    论坛 博客 微论 问答 游戏厅 天涯客 读书 更多 手机 服务 登录 注册   聚焦 民生 文学 旅游 财经 汽车 IT数码 时尚 情感 娱乐 视频 更多 北京 上海 广东 更多 天涯部落> J ...

  5. iOS 类管理

    CocoaPods安装和使用教程 Code4App 原创文章.转载请注明出处:http://code4app.com/article/cocoapods-install-usage 目录 CocoaP ...

  6. 蜗牛爱课 - iOS7、8模态半透明弹出框

    //源Controller中跳转方法实现 MKDialogController *controller = [[MKDialogController alloc] init]; controller. ...

  7. zoj1093 Monkey and Banana

    写到现在,发现1025,1076之前写的都是同一种题型:关于DAG的最长路(最短路). 首先要建立模型,根据关系,确定点和点之间的关系,构成一个DAG,前面几道题每个点之间距离默认为1,这一道题不同点 ...

  8. 封装jQuery插件的步骤

    引语:jQuery提供了很多插件,我们在开发的过程使用插件能节省时间简化开发也避免从头开始编写每个组件,单我们除了懂得使用别人已编写好的插件以外,也到懂得如何封装属于我们自己的插件,以下就是封装jQu ...

  9. Activity 切换 动画

    overridePendingTransition的简介   1 Activity的切换动画指的是从一个activity跳转到另外一个activity时的动画. 它包括两个部分:一部分是第一个acti ...

  10. 1016. 部分A+B

    /* * Main.c * 1016. 部分A+B * Created on: 2014年8月30日 * Author: Boomkeeper *******测试通过********* */ #inc ...