妹味6:ajax与ajax封装

功能)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>

时间: 2025-01-16 23:12:58

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

jQuery中对AJAX操作的封装函数

jQuery提供了6个简化AJAX操作的函数,每个都可以代替元素AJAX中的四步代码! (1)$('xxx').load()         jQuery对象函数 (2)$.get()                   jQuery全局函数 (3)$.post()                 jQuery全局函数 (4)$.getScript()          jQuery全局函数 (5)$.getJSON()           jQuery全局函数 (6)$.ajax()     

原生js和jquery发送ajax请求及封装

原生js                                   // ajax get 五部曲function ajax_get(url,data){ // 异步对象 var ajax=new XMLHttpRequest(); // 设置url和请求方式 // url方法 如果有数据要把数据拼接到url中?name=jack&age=20 if(data){ url+=?; url+=data; }else{}; ajax.open('get',url); // 发送请求 aja

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

生命不息重构不止! 上一篇写了一下我对ajax的再次封装的方法,收到了很多有价值的回复,比如有童鞋建议用$.extend,一开始还以为要做成插件呢,后来才知道,原来这个东东还可以实现合并.省着自己再去做判断了. 还有童鞋说“要不要多加点传入参数”,这一下提醒我了,ajax有很多参数呀,常用的我考虑进来了,但是还有很多不常用的呢,如果需要的话怎么办?在看看我调用原生ajax的方式,kao,完全不支持增加其他参数吗,这怎么行,改一定要改.于是就改成了这样. 1 //对ajax的封装 //最基础的一层

Jquery Ajax二次封装(部分转载)

/* ajax调用扩展 */ $.extend($,{ ajaxGetJson:function(url,data,callback) { $.ajax({ url:url, data:data, datatype:"json", method:"get", contentType: "application/json", beforeSend:function(){ //myLoad();//打开加载层 }, complete:function

javascript ajax 简易的封装

1 function ajax(obj){ 2 var xhr = (function (){//获取xhr对象,为了兼容ie6所以进行了重新封装 3 if(typeof XMLHttpRequest !='undefined') { 4 return new XMLHttpRequest(); 5 }else if(typeof ActiveXObject !='undefined') { 6 var version = [ 7 'MSXML2.XMLHttp6.0', 8 'MSXML2.X

jquery Ajax 全局调用封装

有一种情况:全站都要用异步方式来调用 数据,提交数据,那么你每次操作 都会要$.ajax({.....}) 写重复的方法 和代码,冗余太大, 也浪费时间,虽说你有代码自动提示补全,但真的不优雅,身为前端极客,是不能允许的! [嘿嘿!虽说我现在基本不用jquery了 ,不过异步概念 是永远要用的,就帮助下新人] jQuery Ajax通用js封装 第一步:引入jQuery库 <script type="text/javascript" src="/js/jquery.mi

ajax的再次封装!

js的动态加载.缓存.更新以及复用 系列有点卡文,放心会继续的.先来点更基础的,为js的加载做点铺垫. jQuery的ajax本来就很方便了,为啥还要在进一步的封装呢?这个首先要看项目的具体需求了,如果觉得不需要,那么完全可以直接用jQuery提供的各种ajax的方法.如果像我似地,感觉不太方便的话,那么完全可以按照自己的想法和需求来再次封装一下. 需求: 1.调用的时候更加的简单. 2.可以灵活的做各种设置和变化. 3.可以满足一些通用的需求.比如出错的时候给出提示. 项目现状: 做ajax请

javascript中Ajax请求的封装代码

/****************************ajax请求 start**************************************/ function ajaxClass(_url, _successCallback, _failureCallback, _urlParameters, _callbackParams, _async, _charset, _timeout, _frequency, _requestTimes, _frame) { /** * AJAX

jQuery Ajax 实例 ($.ajax、$.post、$.get)

Jquery在异步提交方面封装的很好,直接用AJAX非常麻烦,Jquery大大简化了我们的操作,不用考虑浏览器的诧异了. 推荐一篇不错的jQuery Ajax 实例文章,忘记了可以去看看,地址为:http://www.cnblogs.com/yeer/archive/2009/07/23/1529460.html 和 http://www.w3school.com.cn/jquery/ $.post.$.get是一些简单的方法,如果要处理复杂的逻辑,还是需要用到jQuery.ajax() 一.$

jQUery_review之jQuery的终极ajax方法$.ajax()

经过的项目大大小小也有非常多的了,印象中很多框架低层封装的方法都是在ajax()方法的基础上进行扩展的.ajax方法可以说是jQuery提供的各式各样的ajax相关方法的鼻祖,所有其他的比如load,get,post,getScript,getJson方法都是扩展于jQuery.ajax方法. 下面是一个实际的DEMO,将上面的参数都用了一遍: 前端页面的代码: <%@ page language="java" import="java.util.*" pag