• 封装Ajax框架!(代码篇)


     写在前面的话,如果中间有什么不明白的,请先看封装ajax框架!(前言篇)

    1、添写一个封闭函数

    (function(){})();

    在一个项目中,可能会引用多个js框架,如果函数名相同,会有命名冲突,所以这里使用封闭函数。

    2、封装一个函数,用于dom元素的获取

    但$是局部变量,外面不能直接使用,所以需要添加window.$ = $;

    表示为全局对象window添加一个"$"的属性,这个属性的值是当前局部变量$的值。

    所以在外部,如果想获取某个dom元素,可以直接:$("content");

    3、封装一个函数,用于创建ajax对象

    因为之前,我们将一个函数赋值给了$,函数也是对象,所以$也就是一个对象

    4、封装ajax的get请求

    为对象$添加一个get方法,参数有三个

      url:表示ajax请求的页面地址

      data:表示get请求时所需要传递的参数

      callback:当ajax得到正确的数据后,所执行的回调函数,也就是参数callback接收的参数应该是一个函数。

    5、封装ajax的post请求

    为对象$添加一个post方法,参数有三个

      url:表示ajax请求的页面地址

      data:表示get请求时所需要传递的参数

      callback:当ajax得到正确的数据后,所执行的回调函数,也就是参数callback接收的参数应该是一个函数。

    当调用ajax请求时,可以使用这种形式

    $.method(页面地址,传递参数,处理函数);

    那么对应的方法中callback参数就指向了这个处理函数,所以callback(xhr.responseText);相当于处理函数(xhr.responseText)

    6、添加返回值类型

    我们在ajax程序中,可以使用三种数据形式:

    a、字符串

    b、xml

    c、json

    需要完善ajax框架 ,可以返回不同类型的数据,再进行不同的处理。首先,为get和post方法添加第四个参数:type,表示期望得到的返回值类型

     再根据type值的不同,返回对应的数据

     

    调用形式

    $.method(请求地址,参数,处理函数,数据类型);

    封装完整的ajax框架代码

     1 (function(){
     2     //用于得到一个dom对象
     3     var $ = function(id){
     4         return document.getElementById(id);
     5     };
     6     //用于得到一个ajax对象
     7     $.init = function(){
     8         try{return new ActiveXObject();}catch(e){}
     9         try{
    10             return new XMLHttpRequest();
    11         }catch(e){
    12             alert("请更换浏览器!");
    13         }
    14     };
    15     //用于发送ajax的get请求调用方法为$.get("demo.php","username=zhangsan&&age=20",function(result){},'json')
    16     $.get = function(url,data,callback,type){
    17         var xhr = $.init();
    18         //首先判断下传递的data参数是否为null,如果不为空直接拼接到url后传递给服务器
    19         if(data !=null){
    20             url = url+"?"+data;
    21         }
    22         xhr.open("get",url);
    23         //解决缓存问题
    24         xhr.setRequestHeader("If-Modified-since","0");
    25         xhr.onreadystatechange = function(){
    26             if(xhr.readyState == 4 && xhr.status == 200){
    27                 //如果没有传递type参数,让其默认为text
    28                 if(type == null){
    29                     type ='text';
    30                 }
    31                 if(type == 'text'){
    32                     callback(xhr.responseText);
    33                 }
    34                 if(type == 'xml'){
    35                     callback(xhr.responseXML);
    36                 }
    37                 if(type == 'json'){
    38                     callback(eval("("+xhr.responseText+")"));
    39                 }
    40             }
    41         };
    42         xhr.send(null);
    43     };
    44     //用于发送ajax的post请求,调用方法为$.post("demo.php","username=zhangsan&&age=20",function(result){},'json')
    45     $.post = function(url,data,callback,type){
    46         var xhr = $.init();
    47         xhr.open("post",url);
    48         xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    49         xhr.onreadystatechange = function(){
    50             if(xhr.readyState == 4 && xhr.status == 200){
    51                 //如果没有传递type参数,让其默认为text
    52                 if(type == null){
    53                     type ='text';
    54                 }
    55                 if(type == 'text'){
    56                     callback(xhr.responseText);
    57                 }
    58                 if(type == 'xml'){
    59                     callback(xhr.responseXML);
    60                 }
    61                 if(type == 'json'){
    62                     callback(eval("("+xhr.responseText+")"));
    63                 }
    64             }
    65         };
    66         xhr.send(data);
    67     };
    68     window.$ = $;
    69 })();
    封装自己的ajax框架
  • 相关阅读:
    首先,编写一个类ChongZai,该类中有3个重载的方法void print();其次, 再编写一个主类来测试ChongZai类的功能。
    创建一个Point类,有成员变量x,y,方法getX(),setX(),还有一个构造方 法初始化x和y。创建类主类A来测试它。
    机动车
    people 0919
    创建一个三角形类,成员变量三边,方法求周长,创建类主类A来测试它。
    百鸡百钱修改
    java 面向对象--------时间作业
    序列化、反序列化
    通讯录
    Java正则表达式
  • 原文地址:https://www.cnblogs.com/qijunjun/p/7263176.html
Copyright © 2020-2023  润新知