ajax是什么呢?说白了就是一个请求,一个读取服务器资源以及提交资源到服务器的中间处理机制,那它具体是怎样工作的,又有怎样的原理呢?

var ajax=function(url,fnSucceed,fnFail){
//第一步:初始化http协议,即实例化一个XMLHttpRequest方法。
//这里还需要做判断,因为微软的老版本IE(<IE7)与众不同的是,它的ajax是通过一个ActiveXObject控件实现的,
//并不是其他浏览器的XMLHttpRequest,这是一种兼容写法。现在其实可以就用XMLHttpRequest来,毕竟连阿里都宣布
//不支持IE8以下的了。
if(window.XMLHttpRequest){
var oAjax=new XMLHttpRequest();
}
else{
var oAjax=new ActiveXObject("Microsoft.XMLHTTP");
}
//第二步:设置发起请求的内容,方式,要访问哪里?哪个url?是要读还是写?(即get 还是 post)是同步还是异步?
oAjax.open('GET',url,true);
//true是异步,要同步就是false,
//get一般用于读取服务器数据或资源文件。
//post一般则是用于用户上传数据时回传至服务器,但这两个实际上都是可读可写,只不过是数据传送的方式不同,
// 之所以人们一般会这样用主要体现在下面这些方面:
// 1、get是通过地址栏传输(可以仔细看我们浏览器的上方地址栏,里面的信息会包括一些比较机密的信息,比如:
// 当用户注册后的信息,如果此时用get进行提交会发生什么呢?你看最上方的地址栏,里面显示的恰恰好是你的账户跟
// 密码,这就很恐怖了,也非常不安全),而post是通过报文传输,数据不会在地址栏显示,会帮你把提交的数据隐藏,
// 相对来说比较安全,get中的url有长度限制,最大长度是2k,也就是2048个字符,而post则无限制,
// 而说到这你可能就会说了,既然post方式这么多优点,那为啥不都用post就可以了?
// 你又错了,是的,post本身也是有限制的,比如:
// 你在浏览网页的时候点快了,要后退刷新什么的,用get呢因为他本质上是获取服务上的资源,而你后退实际上并没有
//要获取服务器上资源的意思(浏览器读得懂),而用post呢?post本质是什么呢?是向服务器提交资源或数据,所以用
//post的时候,你后退了,浏览器还以为你又要提交什么东西,那它就会把数据再重新提交给服务器,造成重复提交数据
//说到本质上的东西,你现在知道为什么get有2k的限制了吧?get就是获取,由于对于一个服务器上的资源的获取实际上
// 是获取资源的url或者再本质点就是一个标识符,资源标识(url不代表就是资源的实际物理地址),这个一般不会太长,
//也没必要太长,你见过地址栏的东西有一大串一大串的吗?没有吧?而post呢?还是回归本质,英文的意思是什么呢?
//帖子,投递,说白了就是上传或提交,我想当初ajax底层XMLHttpRequest他们的作者也肯定希望我们用post就是用来投递,
//用来提交资源的,而get(得到)就是用来获取资源的,它们既然这样想,在设计程序的时候肯定也是这样设计的了,关于
// 这两个不必要研究太深入,只需要牢记语义化,get 读取资源,post 提交资源,这样你就可以搞定9成9的ajax请求了,
//而这,够了!我们不是科学家,钻牛角尖的东西,钻到一定程度就够了,当然如果你有时间推荐深入去研究,好事。 //第三步:发送请求。
oAjax.send(); //第四步:处理请求
/**这第4步有个大坑,什么坑呢?既然是响应终端客户操作的交互请求,那客户什么时候操作呢?我们不知道,服务器也
* 不会知道。那怎么办呢?如果你学过java,有四个字你一定不陌生,说到这你可能想到了,没错,就是事件监听
* 但我们这个ajax呢?它不是这样的,它采用的是js里一直被其他程序语言开发者诟病的回调机制,具体是怎样的呢?
*
* 我们刚刚开头实例化了一个XMLHttpRequest,它提供了三个属性:
* 1、onreadystatechange:拆开看 on readystate change,当readystate这个属性变化的时候,调用这个函数
* 是的,你没翻译错,它就是一个函数,一个回调函数,一个存储了我们预先设置好当用户
* 发起请求后我们要做(或者说服务器要做)的响应操作,一句话,存函数的
*
* 2、readyState:刚刚你是不是在纳闷,我为啥要那样翻译呢?而不是on ready state change呢?看到这个你恍然大悟
* 了吧?嘿嘿,其实正确的翻译还真是第2次翻译的这个,就是当预备的状态改变时,只不过预备的状态
* 我就当成这个了,这样你印象会比较深,没错,语义化,readyState这个就是XMLHttpRequest的状态
* 这个readyState的状态是预先约定俗成好的,类似于协议这样,可以当成一个switch开关,它有几个case,没错
* 就是这么任性,这么认为没问题的,具体是哪几个case呢?
* 0:请求未初始化
* 1:服务器连接已建立
* 2:请求已接收
* 3:请求处理中
* 4:请求已完成,且响应已就绪。(这个用得比较多,毕竟服务器内部的我们并不关心,我们只关心结果)
*
* 3、status:这个也是一个状态,它的可填属性呢,有一大堆:0**(未初始化),1**(请求收到,继续处理),2**,
* 3**,4**,5**,太多了这里就不列举了,有个statusText状态表可自行去查,不过想说的是一般情况下,
* 服务器对数据的处理,响应我们没必要去管它到底是执行到哪一步了?(数据接收不到调试的话除外)
* 我们只需要判断它是否接收完请求,并是否能成功做出响应就可以了,所以呢,我们记住几个常用的就可
* 以了,大脑容量有限,我们应该记一些最精华的部分,而不是越多越好,当然必须先明白原理才可以。
* 这里呢,我列几个吧:
* 200:"OK",最常用,成功的意思 (开发者可能比较多用这个)
* 401:请求授权失败
* 404:未找到页面
* 500:服务器产生内部错误
* 12029:网络不通
*
* 啰嗦了这么多,没实操怎么行呢?
* */
oAjax.onreadystatechange=function(){
if(oAjax.readyState==4){
if(oAjax.status==200){
fnSucceed(oAjax.responseText);//响应成功回调的函数,这里只是简简单单的返回了一串数据,
//可以在里面或外部的函数里继续写其他响应操作
}
else{
if(fnFail){
fnFail(oAjax.status);
}
}
}
};//我们这里存了一个函数了
};
下面贴一个自己写的代码(其实上面都有了,只不过比较杂)
/**
* Created by Administrator on 2018/5/1 0001.
*/
var dc_ajax_g=function(url,fnSucceed,fnFail) {
//if (window.XMLHttpRequest) {
var oAjax = new XMLHttpRequest();
//}
//else {
// var oAjax = new ActiveXObject("Microsoft.XMLHTTP");
//};
oAjax.open('GET',url,true);
oAjax.send();
oAjax.onreadystatechange=function(){
if(oAjax.readyState==4){
if(oAjax.status==200){
fnSucceed(oAjax.responseText);//响应成功回调的函数,这里只是简简单单的返回了一串数据,
//可以在里面或外部的函数里继续写其他响应操作
}
else{
if(fnFail){
fnFail(oAjax.status);
}
}
}
};
};

关于ajax原理阐述的更多相关文章

  1. AJAX原理总结

    AJAX全称 Asynchronous JavaScript and XML(异步的JavaScript 和XML) 同步和异步 异步传输是面向字符的传输,单位是字符 同步传输是面向比特,单位是帧,传 ...

  2. 什么是ajax,ajax原理是什么 ,优缺点是什么

    AJAX工作原理及其优缺点   1.什么是AJAX?AJAX全称为“Asynchronous JavaScript and XML”(异步JavaScript和XML),是一种创建交互式网页应用的网页 ...

  3. ajax原理图解

    Ajax 原理图解 摘自: http://www.nowamagic.net/ajax/ajax_PicForAjaxPrinciple.php Ajax其实已经使用很久了,但一直也没有时间正经的找本 ...

  4. 浅析ajax原理与用法

    1 ajax原理 Ajax(Asynchronous JavaScript and XML (异步的JavaScript和XML)),是一种快速创建 动态网页的技术,目的是显示动态局部刷新.通过XML ...

  5. Ajax原理一篇就够了

    Ajax原理一篇就够了 一.什么是Ajax Ajax(Asynchronous JavaScript and XML的缩写)是一种异步请求数据的web开发技术,对于改善用户的体验和页面性能很有帮助.简 ...

  6. 封装ajax原理

    封装ajax原理 首先处理 用户如果不传某些参数,设置默认值 type默认get 默认url为当前页 默认async方式请求 data数据默认为{} 处理用户传进来的参数对象 遍历,拼接成key=va ...

  7. 简述Ajax原理及实现步骤

    简述Ajax原理及实现步骤 1.Ajax简介 概念 Ajax 即“Asynchronous Javascript And XML”(异步 JavaScript 和 XML). 现在允许浏览器与务器通信 ...

  8. 大话AJAX原理

    大话AJAX原理 一.什么是Ajax Ajax(Asynchronous JavaScript and XML的缩写)是一种异步请求数据的web开发技术,对于改善用户的体验和页面性能很有帮助.简单地说 ...

  9. Ajax -- 原理及简单示例

    1. 什么是Ajax •Ajax被认为是(AsynchronousJavaScript and XML的缩写).现在,允许浏览器与服务器通信而无须刷新当前页面的技术都被叫做Ajax. 2. Ajax ...

随机推荐

  1. Order Management Useful Scripts

    Listed some useful queries scripts for Oracle Order Management Flow. (For Order Management Detailed ...

  2. [Ext.Net] 1.x GridPanel列数过多给Menu菜单加滚动条

    转自:http://www.ext.net.cn/thread-1944-1-2.html 当GirdPanel列数过多,查看列的显示隐藏时会出现下面下面情况,有部分超出了界面被遮罩住了   要解决这 ...

  3. 【网站搭建】搭建独立域名博客 -- 独立域名博客上线了 www.hanshuliang.com

    博客是安装在阿里云的服务器上. 小结 : -- 进入数据库命令 :mysql -uroot -p123456 ; -- 检查nginx配置语法 :.../nginx/sbin/nginx -t; -- ...

  4. 打包volley

    1.如果电脑没有安装git和ant的话,需要安装git和ant,直接Google就可以,并配置环境变量 2.在命令行执行 git clone https://android.googlesource. ...

  5. Unity3D学习笔记(四)Unity的网络基础(C#)

    一 网络下载可以使用WWW类下载资源用法:以下载图片为例WWW date = new WWW("<url>");yield return date;texture = ...

  6. Android studio导入工程很卡及下载网络jar很慢问题总结

    AndroidStudio导入项目一直卡在Building gradle project info,实际上是因为你导入的这个项目使用的gradle与你已经拥有的gradle版本不一致,导致需要下载该项 ...

  7. 总结一下 Spring的IOC、DI

    国庆节刚过,应一些朋友的提问,总结一下Spring中IOC也即DI的通俗理解. 网友wm5920解释: IOC控制反转:说的是创建对象实例的控制权从代码控制剥离到IOC容器控制,实际就是你在xml文件 ...

  8. C# 操作Word 文档——添加Word页眉、页脚和页码

    在Word文档中,我们可以通过添加页眉.页脚的方式来丰富文档内容.添加页眉.页脚时,可以添加时间.日期.文档标题,文档引用信息.页码.内容解释.图片/LOGO等多种图文信息.同时也可根据需要调整文字或 ...

  9. Factor Pattern----工厂模式

    一. 概念 工厂模式就是负责生成其他对象的类或方法,就是把创建对象的过程封装起来,这样随时可以产生一个新的对象,减少代码之间耦合. 二. 使用场景(原因) 工厂模式可以将对象的生产从直接new 一个对 ...

  10. MySQL 和 JDBC(Java数据库连接)

    1.MySQL 1.1   MySQL简介 a)MySQL是一个开源免费的关系型数据库管理系统. b)默认用户:root c)默认端口号: 2.MySQL常用命令 2.1连接MySQL mysql   ...