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 相关文章推荐
30分钟就入门的正则表达式基础教程
Feb 25 Javascript
jQuery函数map()和each()介绍及异同点分析
Nov 08 Javascript
原生js和jquery实现图片轮播淡入淡出效果
Apr 23 Javascript
json定义及jquery操作json的方法
Sep 29 Javascript
微信小程序之picker日期和时间选择器
Feb 09 Javascript
vue-quill-editor富文本编辑器简单使用方法
Sep 21 Javascript
vue观察模式浅析
Sep 25 Javascript
vue实现的仿淘宝购物车功能详解
Jan 27 Javascript
Vue+Element实现网页版个人简历系统(推荐)
Dec 31 Javascript
jQuery实现简单评论功能
Aug 19 jQuery
Vue中引入svg图标的两种方式
Jan 14 Vue.js
详解Vue3使用axios的配置教程
Apr 29 Vue.js
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
zend framework多模块多布局配置
2011/02/26 PHP
PHP 时间日期操作实战
2011/08/26 PHP
关于二级目录拖拽排序的实现(源码示例下载)
2013/04/26 PHP
ThinkPHP5.0框架结合Swoole开发实现WebSocket在线聊天案例详解
2019/04/02 PHP
js获取某月的最后一天日期的简单实例
2013/06/22 Javascript
IE下双击checkbox反应延迟问题的解决方法
2014/03/27 Javascript
js鼠标按键事件和键盘按键事件用法实例汇总
2016/10/03 Javascript
Javascript之面向对象--接口
2016/12/02 Javascript
原生js实现网页顶部自动下拉/收缩广告效果
2017/01/20 Javascript
手机端转换rem适应
2017/04/01 Javascript
详解nodejs的express如何自动生成项目框架
2017/07/12 NodeJs
Vue学习笔记进阶篇之过渡状态详解
2017/07/14 Javascript
Iphone手机、安卓手机浏览器控制默认缩放大小的方法总结(附代码)
2017/08/18 Javascript
React如何实现浏览器打印部分内容详析
2019/05/19 Javascript
Vue自定义多选组件使用详解
2020/09/08 Javascript
[01:06]DOTA2小知识课堂 Ep.01 TP出门不要忘记帮队友灌瓶哦
2019/12/05 DOTA
用Python编写脚本使IE实现代理上网的教程
2015/04/23 Python
Python实现控制台输入密码的方法
2015/05/29 Python
Python实现提取谷歌音乐搜索结果的方法
2015/07/10 Python
Python中装饰器高级用法详解
2017/12/25 Python
Python 中 function(#) (X)格式 和 (#)在Python3.*中的注意事项
2018/11/30 Python
PythonWeb项目Django部署在Ubuntu18.04腾讯云主机上
2019/04/01 Python
python GUI实现小球满屏乱跑效果
2019/05/09 Python
python打开windows应用程序的实例
2019/06/28 Python
python爬虫 基于requests模块的get请求实现详解
2019/08/20 Python
tensorflow 保存模型和取出中间权重例子
2020/01/24 Python
给Django Admin添加验证码和多次登录尝试限制的实现
2020/07/26 Python
详解如何在pyqt中通过OpenCV实现对窗口的透视变换
2020/09/20 Python
Laura Mercier官网:彩妆大师罗拉玛斯亚的化妆品牌
2018/01/04 全球购物
美国隐形眼镜零售商:LensPure
2019/03/10 全球购物
介绍一下SQL Server里面的索引视图
2016/07/31 面试题
小班下学期个人总结
2015/02/12 职场文书
《棉鞋里的阳光》教学反思
2016/02/20 职场文书
2020年元旦祝福语录,总有适合你的
2019/12/31 职场文书
CSS实现章节添加自增序号的方法
2021/06/23 HTML / CSS
mysql 乱码 字符集latin1转UTF8
2022/04/19 MySQL