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. HDFS的运行原理(转载)

    原文地址:http://www.cnblogs.com/laov/p/3434917.html 简介 HDFS(Hadoop Distributed File System )Hadoop分布式文件系 ...

  2. JVM系列文章(三):Class文件内容解析

    作为一个程序猿,只知道怎么用是远远不够的.起码,你须要知道为什么能够这么用.即我们所谓底层的东西. 那究竟什么是底层呢?我认为这不能一概而论.以我如今的知识水平而言:对于Web开发人员,TCP/IP. ...

  3. Android二维码开源项目zxing编译

    ZXing是一个开放源代码的,用Java实现的多种格式的1D/2D条码图像处理库,它包括了联系到其它语言的port.Zxing能够实现使用手机的内置的摄像头完毕条形码的扫描及解码.该项目可实现的条形码 ...

  4. jQuery关于mouseover和mouseenter的区别

    原生的mouseenter是dom3级的事件,对于jQuery等一些框架已经实现了这个事件.但是它到底跟mouseover有什么区别? jQuery在实现这两个事件的时候,mouseover支持事件冒 ...

  5. 关于HTML css的一些题目

    1.dcutype是什么,他是干嘛用的 doctype是文档的一种声明,告诉浏览器器用什么规则来解析文档. 2.ul ol dl分别适用于什么地方? ul无序列表 ol有序列表 dl是定义列表,会默认 ...

  6. node.js querystring处理参数

    C:\Documents and Settings\Administrator\WebstormProjects\untitled6>node> url{ parse: [Function ...

  7. Hadoop学习笔记——入门指令操作

    假设Hadoop的安装目录HADOOP_HOME为/home/admin/hadoop. 启动与关闭启动HADOOP1. 进入HADOOP_HOME目录. 2. 执行sh bin/start-all. ...

  8. dede调取文章内容的第一张图片

    dede调用文章第一张图片(非缩略图)的实现方法 这篇文章主要是介绍dede调用文章第一张图片的实现代码,需要的朋友可以参考下 需要进行两个操作 第一步,修改include/extend.func.p ...

  9. mysql学习(十二)内置函数

    常用的内置函数,常用select\ 字符串函数 contat('' , '', .....) //连接字符串 select concat(name, ' age is ', age) from per ...

  10. DBI && MySQL lock

    DBI: url set isolation to dirty read my $npmdb_dbh = DBI->connect("DBI:ODBC:npmdb", &qu ...