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 相关文章推荐
asp.net下使用jquery 的ajax+WebService+json 实现无刷新取后台值的实现代码
Sep 19 Javascript
用方法封装javascript的new操作符(一)
Dec 25 Javascript
js图片预加载示例
Apr 30 Javascript
使用JS代码实现点击按钮下载文件
Nov 12 Javascript
JS简单获取日期相差天数的方法
Apr 24 Javascript
Bootstrap响应式表格详解
May 23 Javascript
Vue 父子组件数据传递的四种方式( inheritAttrs + $attrs + $listeners)
May 04 Javascript
js中数组对象去重的两种方法
Jan 18 Javascript
手把手带你封装一个vue component第三方库
Feb 14 Javascript
微信小程序使用canvas自适应屏幕画海报并保存图片功能
Jul 25 Javascript
微信小程序绑定手机号获取验证码功能
Oct 22 Javascript
vue中在vuex的actions中请求数据实例
Nov 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
曾在DC漫画界反派角色扮演的演员,谁才是你心目中的小丑之王?
2020/04/09 欧美动漫
十天学会php(3)
2006/10/09 PHP
php多层数组与对象的转换实例代码
2013/08/05 PHP
smarty内部日期函数html_select_date()用法实例分析
2015/07/08 PHP
PHP实现文件上传下载实例
2016/10/18 PHP
让iframe子窗体取父窗体地址栏参数(querystring)
2009/10/13 Javascript
Jquery 高亮显示文本中重要的关键字
2009/12/24 Javascript
动态调用CSS文件的JS代码
2010/07/29 Javascript
javaScript年份下拉列表框内容为当前年份及前后50年
2014/05/28 Javascript
jquery实现浮动的侧栏实例
2015/06/25 Javascript
JS DOM实现鼠标滑动图片效果
2020/09/17 Javascript
Javascript自定义事件详解
2017/01/13 Javascript
jQuery中DOM节点的删除方法总结(超全面)
2017/01/22 Javascript
vue项目中导入swiper插件的方法
2018/01/30 Javascript
如何用input标签和jquery实现多图片的上传和回显功能
2018/05/16 jQuery
vue.js实现的经典计算器/科学计算器功能示例
2018/07/11 Javascript
小程序云开发获取不到数据库记录的解决方法
2019/05/18 Javascript
[59:08]Ti4 冒泡赛第二天 NEWBEE vs Titan 2
2014/07/15 DOTA
Python isinstance判断对象类型
2008/09/06 Python
Python的print用法示例
2014/02/11 Python
django 基于中间件实现限制ip频繁访问过程详解
2019/07/30 Python
python 等差数列末项计算方式
2020/05/03 Python
Django ModelForm组件原理及用法详解
2020/10/12 Python
Pycharm创建文件时自动生成文件头注释(自定义设置作者日期)
2020/11/24 Python
iHerb台湾:维生素、保健品和健康产品
2018/01/31 全球购物
全球烹饪课程的领先预订平台:Cookly
2020/01/28 全球购物
材料物理专业大学毕业生求职信
2013/10/15 职场文书
2013年员工自我评价范文
2013/12/27 职场文书
运动会入场词50字
2014/02/20 职场文书
党员教师工作决心书
2014/03/13 职场文书
数学系毕业生求职信
2014/05/29 职场文书
2014国庆节幼儿园亲子活动方案
2014/09/16 职场文书
创业计划书详解
2019/07/19 职场文书
vue中data改变后让视图同步更新的方法
2021/03/29 Vue.js
go语言中切片与内存复制 memcpy 的实现操作
2021/04/27 Golang
你真的会用Mysql的explain吗
2022/03/31 MySQL