功能)ajax能且仅能 从服务器读取文件
环境)需要服务器环境才能测试,可以用工具建立本地服务器环境
缓存)解决缓存问题:url加时间戳让每次请求地址唯一,如 url='abc.txt?t='+new Date().getTime();
编码)请求的文件必须与网页的编码一致,否则乱码
处理eval()处理请求结果很方便,自动分割。但据说eval有很多问题,除了ajax中,其它地方暂时不要乱用。
实例)请求数据并在同一个块内显示、json数据处理、分页数据请求
 
 
 
ajax函数四步:
1.创建ajax对象
2.连接服务器
3.发送请求
4.接收返回
 
 
//用一个不存在的变量:出错
//用一个不存在的属性:undefined
 
 
ajax封装函数(可以直接使用):
// 开始----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
function ajax(url, fnSucc, fnFaild){
     //1.创建ajax对象
     var oAjax=null;
     if(window.XMLHttpRequest){             // 对ie6来说,window.XMLHttpRequest 是一个undefined属性,为假;其它浏览器是存在的,为真。若此处为 XMLHttpRequest ,则ie6中无法通过,报错。
          oAjax=new XMLHttpRequest();     // ie6不认
     }else{
          oAjax=new ActiveXObject("Microsoft.XMLHTTP");          //ie6专属
     }

//2.连接服务器
     oAjax.open('GET', url, true);               //open(方法, url, 是否异步)

//3.发送请求
     oAjax.send();

//4.接收返回
     //OnReadyStateChange
     oAjax.onreadystatechange=function (){
          if(oAjax.readyState==4){                        //请求状态已完成:0未初始化、1发送请求、2收到全部响应内容、3对加密内容解析、4内容解析完成可以使用了
               if(oAjax.status==200){                       //请求结果:已经成功获取指定url的内容。
                    fnSucc(oAjax.responseText);        //设置解析完的结果为传入的成功函数的参数,使用后续函数操作
               }else{
                    if(fnFaild){                                      //如果获取内容失败且存在失败时处理函数,则执行
                         fnFaild();
                    }
               }
          }
     };
}

// 结束----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 
 
 
请求状态监控
onreadystatechange事件
readyState属性:请求状态
     0(未初始化)还没有调用open()方法
     1(载入)已调用send()方法,正在发送请求
     2(载入完成)send()方法完成,已收到全部响应内容
     3(解析)正在解析响应内容
     4(完成)响应内容解析完成,可以在客户端调用了
status属性:请求结果(200:成功;  404、300+、500+:都是有错误,如未找到文件)
responseText:请求得到的内容
 
 
// 简单ajax()使用(加时间戳) =============================================================
// 须先引入上面封装的ajax()函数
window.onload=function(){
     var oBtn=document.getElementById('btn1');
     oBtn.onclick=function(){
          ajax('abc.txt?t='+new Date().getTime(),function(str){
               alert(str);
          });
     };
}
 
 
// 向服务器请求 1.txt  2.txt  3.txt并显示到同一个内容框里 =======================================
// 须先引入上面封装的ajax()函数
window.onload=function (){
     var aBtn=document.getElementsByTagName('input');
     var oDiv=document.getElementById('div1');
     var i=0;

for(i=0;i<aBtn.length;i++){
          aBtn[i].index=i;
          aBtn[i].onclick=function (){
               ajax(this.index+1+'.txt?t='+new Date().getTime(), function (str){     //function(str){}成功后执行的匿名函数。

                    oDiv.innerHTML=str;
               });
          };
     }
};
 
 
// eval()对结果进行分割处理 ===========================================================
// 普通数组数据处理
window.onload=function(){
     var oBtn=document.getElementById('btn1');
     oBtn.onclick=function(){
          ajax('data.txt?t='+new Date().getTime(),function(str){
               //str->'[1,2,3,4]'
               var arr=eval(str);
               alert(arr[3]);          //此时结果为4。若不进行eval()处理那么返回的结果是一个字符串,结果为2
          });
     };
}
 
// json数据处理
window.onload=function(){
     var oBtn=document.getElementById('btn1');
     oBtn.onclick=function(){
          ajax('data.json?t='+new Date().getTime(),function(str){
               //str-> [{a: 12, b: 5}, {a: 8, b: 9}]
               var arr=eval(str);
               alert(arr[0].b);     //此时结果为5。eval()对数据分割成多维数组
          });
     };
}
 
 
// 分页数据请求 ====================================================================
// 须先引入上面封装的ajax()函数
window.onload=function(){
     var oUl=document.getElementById('ul1');
     var aBtn=document.getElementsByTagName('a');
     var i=0;

for(i=0;i<aBtn.length;i++){
          aBtn[i].index=i;
          aBtn[i].onclick=function(){
               // 需要请求的三个文件名为:page1.txt page2.txt page3.txt
               ajax('page'+(this.index+1)+'.txt?t='+new Datd().getTime(),function(str){
                    var aData=eval(str);

oUl.innerHTML='';
                    for(i=0;i<aData.length;i++){
                         var oLi=document.createElement('li');
                         //page1.txt中的数据为:[{user: 'blue', pass: '123'}, {user: 'aaa', pass: 'jjfhier'}, {user: 'leo', pass: '123456'}] (另两个类似)
                         oLi.innerHTML='<strong>'+aData[i].user+'</strong><i>'+aData[i].pass+'</i>';          //此处输出格式根据需要更改
                         oUl.appendChild(oLi);
                    }

               });
          };
     }
}

<body>
<ul id="ul1">
</ul>
<a href="javascript:;">1</a>
<a href="javascript:;">2</a>
<a href="javascript:;">3</a>
</body>

妹味6:ajax与ajax封装的更多相关文章

  1. ajax的再次封装!(改进版) —— new与不 new 有啥区别?

    生命不息重构不止! 上一篇写了一下我对ajax的再次封装的方法,收到了很多有价值的回复,比如有童鞋建议用$.extend,一开始还以为要做成插件呢,后来才知道,原来这个东东还可以实现合并.省着自己再去 ...

  2. ajax的再次封装!

    js的动态加载.缓存.更新以及复用 系列有点卡文,放心会继续的.先来点更基础的,为js的加载做点铺垫. jQuery的ajax本来就很方便了,为啥还要在进一步的封装呢?这个首先要看项目的具体需求了,如 ...

  3. Ajax基础之封装3

    今天接着我们上篇博文的栗子,现在我来扩大一下需求,之前是点击按钮取出新闻,现在要实现每隔一段事件进行新闻的更新.这个时候,肯定是加一个定时器,然后每隔一段事件,再进行一次Ajax请求,既然要经常用到A ...

  4. jQuery Ajax 二次封装

    jQuery Ajax通用js封装 第一步:引入jQuery库 <script type="text/javascript" src="<%=path%> ...

  5. ajax二次封装之异步加载

    ajax二次封装之异步加载 ajax异步加载会导致在数据未加载回来就读取数据,然后出现数据为空的报错.在ajax封装时,将ajax直接改为同步,虽然可以解决报错,但是会导致页面渲染被阻塞,接口反应时间 ...

  6. 微信小程序request(ajax)接口请求封装

    微信小程序request(ajax)接口请求封装 最近在进行小程序的编写,需要调用后端接口,经常要用到wx.request方法,所以就自己封装了一下,简化一下代码,如果能给大家提供帮助更好,在封装的时 ...

  7. ajax原理及封装

    一:AJAX 简介 AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术,通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新. AJAX = 异步 JavaScri ...

  8. ajax原生js封装

    不带注释的 function ajax(json) { json.type = json.type ? json.type : 'get'; json.async = json.async == fa ...

  9. Ajax函数的封装

    Ajax函数的封装 function ajax(options) { // 1 创建Ajax对象 let xhr = new XMLHttpRequest(); // 2 告诉Ajax对象要想哪儿发送 ...

  10. Ajax概述,封装以及联合模板引擎进行数据交互

    欢迎大家去博客冰山一树Sankey,浏览效果更好.直接右上角搜索该标题即可 博客园主页:博客园主页-冰山一树Sankey CSDN主页:CSDN主页-冰山一树Sankey 更多资料可参考Ajax 介绍 ...

随机推荐

  1. 部分设备在微信内无法播放audio的解决方案

    临时接到一个紧急的需求,一个活动页面,在某台iPhone 5S设备上无法播放音频,其它设备均正常.我接到这个任务时,也是一脸懵逼,试过在audio标签上添加controls属性来显示audio,结果发 ...

  2. AT&amp;T汇编语言——工具及程序组成

    1.开发工具 在汇编语言中,用到的工具主要用下面几个: 汇编器.连接器.调试器.编译器 由于我在这里的是AT&T汇编语言.所以工具下也都是gnu下的那些. 1.1 汇编器(as) 汇编器有非常 ...

  3. Codeforces Beta Round #17 C. Balance DP

    C. Balance 题目链接 http://codeforces.com/contest/17/problem/C 题面 Nick likes strings very much, he likes ...

  4. web开发必备-网络基础知识---记录一下

    1.osi 7层网络模型 2.socket 套接字编程 PS:一个从事web开发的人来说,我们是使用http协议来和服务器来进行交互.后面会详细的分析这个过程.

  5. WPF 获取程序路径的一些方法,根据程序路径获取程序集信息

    一.WPF 获取程序路径的一些方法方式一 应用程序域 //获取基目录即当前工作目录 string str_1 = System.AppDomain.CurrentDomain.BaseDirector ...

  6. 菜鸟教程之工具使用(十二)——Eclipse突出显示选中的相同变量

    大家都知道在Eclipse中,选中一个变量或者方法名(或者说是一个单词),当前文件中跟他一样的变量会被突出显示,这个功能很好用.能让我们很方便的找到该变量在哪被用到了.前段时间我的Eclipse的这个 ...

  7. Windows 7下安装MongoDB

    1.下载mongodb-win32-x86_64-2008plus-2.6.7-signed.msi(如今最新版本号已经到了3.0) 2.如果为64位操作系统则双击 mongodb-win32-x86 ...

  8. gulp前端自动化构建工具使用

    (1)新建项目目录gulp_web (2)项目目录下建目录src里面存放需要进行gulp处理的文件目录及文件 (3)gulpfile.js文件内容为声明需要打包应用的gulp组件及打包文件路径和打包任 ...

  9. ch6 影响 MySQLServer 性能的相关因素

    第6章影响 MySQLServer 性能的相关因素 前言: 大部分人都一致认为一个数据库应用系统(这里的数据库应用系统概指所有使用数据库的系统)的性能瓶颈最容易出现在数据的操作方面,而数据库应用系统的 ...

  10. iOS:缓存与Operation优先级问题

    这篇博客来源于今年的一个面试题,当我们使用SDWebImgae框架中的sd_setImageWithURL: placeholderImage:方法在tableView或者collectionView ...