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 相关文章推荐
一份老外写的XMLHttpRequest代码多浏览器支持兼容性
Jan 11 Javascript
js截取固定长度的中英文字符的简单实例
Nov 22 Javascript
Jquery 切换不同图片示例代码
Dec 05 Javascript
javascript:void(0)的问题使用探讨
Apr 10 Javascript
Vue.js每天必学之表单控件绑定
Sep 05 Javascript
Bootstrap滚动监听组件scrollspy.js使用方法详解
Jul 20 Javascript
vuejs实现ready函数加载完之后执行某个函数的方法
Aug 31 Javascript
node错误处理与日志记录的实现
Dec 24 Javascript
ES6 Array常用扩展的应用实例分析
Jun 26 Javascript
如何阻止小程序遮罩层下方图层滚动
Sep 05 Javascript
js 获取本周、上周、本月、上月、本季度、上季度的开始结束日期
Feb 01 Javascript
HTML+JS实现在线朗读器
Feb 15 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
解析PHPExcel使用的常用说明以及把PHPExcel整合进CI框架的介绍
2013/06/24 PHP
基于PHP+jQuery+MySql实现红蓝(顶踩)投票代码
2015/08/25 PHP
JavaScript 模拟用户单击事件
2009/12/31 Javascript
JavaScript调用堆栈及setTimeout使用方法深入剖析
2013/02/16 Javascript
Jquery实现视频播放页面的关灯开灯效果
2013/05/27 Javascript
使用jquery animate创建平滑滚动效果(可以是到顶部、到底部或指定地方)
2014/05/27 Javascript
javascript实现淘宝幻灯片广告展示效果
2015/04/27 Javascript
Jquery结合HTML5实现文件上传
2015/06/25 Javascript
js实现仿百度风云榜可重复多次调用的TAB切换选项卡效果
2015/08/31 Javascript
JavaScript实现的简单烟花特效代码
2015/10/20 Javascript
基于JavaScript实现简单的随机抽奖小程序
2016/01/05 Javascript
通过正则表达式获取url中参数的简单实现
2016/06/07 Javascript
Bootstrap实现圆角、圆形头像和响应式图片
2016/12/14 Javascript
关于vue-resource报错450的解决方案
2017/07/24 Javascript
基于jquery实现九宫格拼图小游戏
2018/11/30 jQuery
vue2 拖动排序 vuedraggable组件的实现
2019/08/08 Javascript
webpack3升级到webpack4遇到问题总结
2019/09/30 Javascript
javascript局部自定义鼠标右键菜单
2020/12/08 Javascript
[47:06]DOTA2上海特级锦标赛主赛事日 - 4 败者组第五轮 MVP.Phx VS EG第一局
2016/03/05 DOTA
[50:34]VGJ.T vs Fnatic 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
在ironpython中利用装饰器执行SQL操作的例子
2015/05/02 Python
python距离测量的方法
2018/03/06 Python
python实现在IDLE中输入多行的方法
2018/04/19 Python
python topN 取最大的N个数或最小的N个数方法
2018/06/04 Python
Python pymongo模块常用操作分析
2018/09/01 Python
python之pyqt5通过按钮改变Label的背景颜色方法
2019/06/13 Python
pyspark给dataframe增加新的一列的实现示例
2020/04/24 Python
MUGLER官方网站:蒂埃里·穆勒香水
2019/11/26 全球购物
一份婚庆公司创业计划书
2014/01/11 职场文书
班级道德讲堂实施方案
2014/02/24 职场文书
年度考核自我鉴定
2014/03/19 职场文书
交通事故和解协议书
2014/09/25 职场文书
2015秋季幼儿园开学寄语
2015/03/25 职场文书
门店店长岗位职责
2015/04/14 职场文书
golang 实现并发求和
2021/05/08 Golang
教你如何使用Python实现二叉树结构及三种遍历
2021/06/18 Python