JS实现Ajax的方法分析


Posted in Javascript onDecember 20, 2016

本文实例分析了JS实现Ajax的方法。分享给大家供大家参考,具体如下:

一、什么是Ajax

不刷新的情况下读取数据或提交数据

(最早出现ajax:谷歌地图,拖动一下出现一片新的视野)

应用:用户注册、在线聊天、微博

特性:只能从服务器上去读取数据(所以我们需要配置自己的服务器程序AMP)

二、使用Ajax

1.基础:请求并显示静态TXT文件

btn.onclick=function(){
  ajax('abc.txt',function(str){
    alert(str);
  });
}

①Ajax里面文件的编码要和页面的编码一致

②缓存、阻止缓存(好处大于缺点,所以不能什么时候都清缓存)
缓存能帮助我们加速网络访问,所谓缓存,就是服务器上这个文件,它只读一次,第二次就从你的硬盘里、缓存里直接去拿,而不是真的通过网络来请求

有时候我们需要阻止缓存(比如服务器上东西变化了,但客户端请求来的还是原来的东西),办法如下,加时间戳:

ajax('abc.txt?t='+new Date().getTime(),function(str){});
//new Date().getTime()为现在的毫秒数,用户绝对不可能在1毫秒内点两次,所以每次请求的t都不一样

2.动态数据:请求Js(或json)文件

Ajax从服务器上读取的所有东西都是以文本的形式(字符串)存在的,如何转换?

eval()计算字符串里的值

ajax('abc.txt',function(str){
    var arr=eval(str);
    alert(arr);
});

例子:分页

<ul id="list">
</ul>
<a href="#"></a>
<a href="#"></a>
<a href="#"></a>
window.onload=function(){
  var oUl=getElementById("list");
  var aBtn=getElementsByTagName("a");
  var i;
  for(i=0;i<aBtn.length;i++){
    aBtn[i].index=i;
    aBtn[i].onclick=function(){
      ajax('page'+(this.index+1)+'.txt',function(str){
        var aData=eval(str);
        oUl.innerHTML='';
        for(i=0;i<aData.length:i++){
          var oLi=document.createElement("li");
          oLi.innerHTML='<strong>'+aData[i].user+'</strong><i>'+aData[i].pass+'</i>';
          oUl.appendChild(oLi);
        }
      });
    };
  }
};

三、Ajax原理

HTTP请求方法

1.GET--用于获取数据(如浏览贴子) 把数据放在URL(网址)里面来提交     安全性低、容量低、便于分享(将网址发给别人)

2.POST--用于上传数据(如用户注册) 把数据放在不是URL的地方     安全性一般、容量几乎无限、不便于分享

四、封装一个自己的Ajax函数

1.创建Ajax

2.连接服务器

3.发送请求

4.接收返回

function ajax(url,fnSucc,fnFaild){
  //1.创建
  var oAjax=null;
  if(window.XMLHttpRequest){ //对ie6来说,直接用XMLHttpRequest是不存在的会出错
    oAjax=new XMLHttpRequest(); //ie6以上
  }else{
    oAjax=new ActiveXObject("Microsoft.XMLHTTP"); //ie6
  }
  //2.连接服务器,open(方法,url,是否异步)
  oAjax.open('GET',url,true);
  //3.发送请求
  oAjax.send();
  //4.接收返回 OnReadyStateChange
  oAjax.onreadystatechange=function(){    //onreadystatechange事件
    if(oAjax.readyState==4){ //readyState属性:请求状态 4是完成(完成不代表成功)
      if(oAjax.status==200){ //status属性:请求结果 200代表成功
        fnSucc(oAjax.responseText); //responseText属性:服务器发回给我们的内容
      }
      else{
        if(fnFaild){
          fnFaild();
        }
      }
    }
  };
};

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
使用jscript实现二进制读写脚本代码
Jun 09 Javascript
十分钟打造AutoComplete自动完成效果代码
Dec 26 Javascript
javascript模拟的Ping效果代码 (Web Ping)
Mar 13 Javascript
js的alert弹出框出现乱码解决方案
Sep 02 Javascript
jquery序列化表单以及回调函数的使用示例
Jul 02 Javascript
如何改进javascript代码的性能
Apr 02 Javascript
深入浅析JavaScript中对事件的三种监听方式
Sep 29 Javascript
JavaScript实现的多种鼠标拖放效果
Nov 03 Javascript
angular基于路由控制ui-router实现系统权限控制
Sep 27 Javascript
常用jQuery选择器汇总
Feb 02 Javascript
详解操作虚拟dom模拟react视图渲染
Jul 25 Javascript
Node.js Stream ondata触发时机与顺序的探索
Mar 08 Javascript
JS实现淡入淡出图片效果的方法分析
Dec 20 #Javascript
自学实现angularjs依赖注入
Dec 20 #Javascript
JS多物体实现缓冲运动效果示例
Dec 20 #Javascript
详解js中Number()、parseInt()和parseFloat()的区别
Dec 20 #Javascript
JavaScript 限制文本框不可输入英文单双引号的方法
Dec 20 #Javascript
用jQuery.ajaxSetup实现对请求和响应数据的过滤
Dec 20 #Javascript
NPM 安装cordova时警告:npm WARN deprecated minimatch@2.0.10: Please update to minimatch 3.0.2 or higher to
Dec 20 #Javascript
You might like
thinkPHP模型初始化实例分析
2015/12/03 PHP
php-msf源码详解
2017/12/25 PHP
PHP通过curl获取接口URL的数据方法
2018/05/31 PHP
Laravel基础-关于引入公共文件的两种方式
2019/10/18 PHP
十分钟打造AutoComplete自动完成效果代码
2009/12/26 Javascript
jQuery与ExtJS之选择实例分析
2010/08/19 Javascript
在IE浏览器中resize事件执行多次的解决方法
2011/07/12 Javascript
如何判断微信内置浏览器(通过User Agent实现)
2014/09/01 Javascript
javascript排序函数实现数字排序
2015/06/26 Javascript
js模拟淘宝网的多级选择菜单实现方法
2015/08/18 Javascript
JavaScript数组的一些奇葩行为
2016/01/25 Javascript
使用jQuery操作HTML的table表格的实例解析
2016/03/13 Javascript
如何让一个json文件显示在表格里【实现代码】
2016/05/09 Javascript
全国省市二级联动下拉菜单 js版
2016/05/10 Javascript
Javascript同时声明一连串(多个)变量的方法
2017/01/23 Javascript
mac下的nodejs环境安装的步骤
2017/05/24 NodeJs
关于element-ui的隐藏组件el-scrollbar的使用
2019/05/29 Javascript
微信小程序实现弹框效果
2020/05/26 Javascript
小结Python用fork来创建子进程注意事项
2014/07/03 Python
python入门教程 python入门神图一张
2018/03/05 Python
一条命令解决mac版本python IDLE不能输入中文问题
2018/05/15 Python
在Pycharm中执行scrapy命令的方法
2019/01/16 Python
Python使用os.listdir()和os.walk()获取文件路径与文件下所有目录的方法
2019/04/01 Python
python lambda表达式在sort函数中的使用详解
2019/08/28 Python
python多环境切换及pyenv使用过程详解
2019/09/27 Python
python序列类型种类详解
2020/02/26 Python
Casadei卡萨蒂官网:意大利奢侈鞋履品牌
2017/10/28 全球购物
介绍一下Linux文件的记录形式
2012/04/18 面试题
简历中个人求职的自我评价模板
2013/11/29 职场文书
护士自我介绍信
2014/01/13 职场文书
个人简历中自我评价
2014/02/11 职场文书
《掌声》教学反思
2014/02/23 职场文书
2014年为民办实事工作总结
2014/12/20 职场文书
保安辞职信范文
2015/02/28 职场文书
2015年农村党员干部主题教育活动总结
2015/03/25 职场文书
企业廉洁教育心得体会
2016/01/20 职场文书