`

自己封装一个简单的ajax插件

阅读更多

这个插件主要是我为了学习原生ajax和函数封装而写的,还存在很多bug,同样在学习ajax和函数封装的同学可以参考参考,取其精华弃其糟粕

 

function myAjax(obj) {
     var xmlHttp;                         //保存xmlHttpRequest对象
     var type = obj.requestType;          //保存请求方式
     var cache = obj.cache || false;      //get时是否使用缓存,默认否
     var success = obj.success;           //数据请求成功的回调方法
     var error = obj.error;               //发生错误的回调方法
     var async = obj.async || false;      //是否异步,默认否
     var data = [];                       //存储用户发来的数据
     var url = obj.url;                   //用户请求地址


     createXmlHttp();   //执行xmlHttp创建函数

     //创建xmlHttp失败
     if(!xmlHttp) {
        console.log("我的老哥,创建xmlHttp对象失败啦!您的浏览器不支持xmlHttpRequest对象");
     }

     try {
         //定义状态监听函数
         xmlHttp.onreadystatechange = function () {
             switch (xmlHttp.readyState) {
                 case 1:
                     console.log("open() 方法已调用,但是 send() 方法未调用。请求还没有被发送。");
                     break;
                 case 2:
                     console.log("Send() 方法已调用,HTTP 请求已发送到 Web 服务器。未接收到响应。");
                     break;
                 case 3:
                     console.log("所有响应头部都已经接收到。响应体开始接收但未完成。");
                     break;
                 case 4:
                     if (xmlHttp.status == 200) {
                         console.log("HTTP 响应已经完全接收。");
                         success(xmlHttp.responseText);                              //调用回调函数
                     }
                     break;
                 default:
                     error(xmlHttp.statusText);
                     break;
             }
         };

         //把用户传来的数据转换成字符串
         for (var i in obj.data) {
             data.push(i + '=' + obj.data[i]);
         }
         data = data.join('&');

         if (type.toUpperCase() == 'GET') {                //如果是get请求
             if (cache == false) {                         //如果get请求不使用缓存
                 xmlHttp.open('get', url + '?' + data + '&random=' + Math.random(), async);
                 xmlHttp.send('null');
             } else {                                     //如果get请求使用缓存
                 xmlHttp.open('get', url + '?' + data, async);
                 xmlHttp.send('null');
             }
         } else if (type.toUpperCase() == 'POST')          //如果是post请求
         {
             xmlHttp.open('post', url, async);
             xmlHttp.setRequestHeader("Content-Type"
                 , "application/x-www-form-urlencoded");
             xmlHttp.send(data);
         } else {
            throw  new Error('您的请求方法有误!');
         }
     } catch (error) {
         console.log("出错啦:" + error.message);
     }


    //创建xmlHttpRequest对象函数
    function createXmlHttp() {
        if(window.ActiveXObject) {
            try {
                xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
            } catch (e) {
                xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
            }

        } else if (window.XMLHttpRequest){
            try {
                xmlHttp = new XMLHttpRequest();
            } catch(e) {
                xmlHttp = false;
            }
        }
    }

 }

 

插件基本逻辑:
    GET请求:
    1.新建XHR对象
    2.定义状态监听函数,各种状态对应各种处理
    3.调用open方法启动请求,准备发送
    4.使用send方法发送请求,参数为null
  
    POST请求:
    1.新建XHR对象
    2.定义状态监听函数,各种状态对应各种处理
    3.使用open方法启动请求,准备发送
    4.设置http头信息的Content-Type类型,模拟表单发送
    5.使用send方法发送请求,参数为自己要发送的东西
插件使用方法:
  1.在html页面引入myAjax.js文件之后就可以使用啦
  2.
    get方法使用例子:
   myAjax({
      requestType: 'get',
      url: '/getFunc',
      async: true,
      cache: false,
      data: { name: "lin", age: "20"},
      success: function (data) {
          alert(data);
      },
      error: function (statusText) {
         alert("请求失败了,以下是具体信息:\n" + statusText);
      }
     });

    post方法使用例子:
    myAjax({
     requestType: 'post',
     url: '/postFunc',
     async: true,
     data: {name:"shuai", age: 10},
     success: function (data) {
         console.log(data);
     },
     error: function (statusText) {
         alert("请求失败了,以下是具体信息:\n" + statusText);
     }
    });

 

 

 

 

 

.

分享到:
评论

相关推荐

    自己用的简单封装AJAX类

    **标题解析:** "自己用的简单封装AJAX类" 指的是作者为了个人使用需求,编写了一个简化的AJAX处理类。AJAX(Asynchronous JavaScript and XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术,...

    ajaxSubmit_一个封装了上传代码的ajax插件_

    `ajaxSubmit`是一个基于jQuery的插件,它扩展了传统的AJAX功能,特别是针对文件上传进行了优化。传统的表单提交会刷新整个页面,而`ajaxSubmit`通过使用HTML5的FormData对象,可以在不刷新页面的情况下实现文件上传...

    封装的分页插件

    这里提到的是一个由个人开发者封装的简单分页插件,它可以帮助我们轻松地在网页上实现数据的分页显示。 分页的基本原理是将大数据集分割成较小、可管理的部分,通常每一页显示一定数量的条目。这样可以提高用户体验...

    自己封装的jquery插件@实现了简单的轮播图

    本文将深入探讨如何使用jQuery封装一个简单的轮播图插件,结合描述和标签,我们将涵盖以下知识点: 1. **jQuery基础**: jQuery的核心功能包括选择器、DOM操作、事件处理和动画效果。在封装轮播图插件时,我们首先...

    基于原生javascript封装的Ajax插件含Node测试接口

    下面是一个简单的基于原生JavaScript封装的Ajax插件示例: ```javascript function Ajax(options) { var xhr = new XMLHttpRequest(); xhr.onreadystatechange = function() { if (xhr.readyState === 4 && xhr....

    原生JS封装Ajax插件(同域、jsonp跨域)-.docx

    原生JS封装Ajax插件(同域、jsonp跨域)_.docx

    原生JS封装Ajax插件(同域、jsonp跨域)-.pdf

    原生JS封装Ajax插件(同域、jsonp跨域)_.pdf

    JQUERY插件--ajax搜索

    在 jQuery 中实现一个简单的 Ajax 请求如下: ```javascript $.ajax({ url: 'your_server_url', type: 'GET', // 或 'POST' data: { keyword: 'search_term' }, success: function(response) { // 在这里处理...

    ajax插件下载

    1. **核心API**:一个封装好的XMLHttpRequest对象,提供发送Ajax请求的简便方法,如`ajax.send(url, method, data, callback)`,用于发起GET或POST请求。 2. **数据序列化与反序列化**:可能包含了将JavaScript对象...

    原生JS封装Ajax插件(同域、jsonp跨域)

    用原生Js封装了一个Ajax插件,引入一般的项目,传传数据,感觉还是可行的。。。简单说说思路,如有不正确的地方,还望指正^_^ 一、Ajax核心,创建XHR对象 Ajax技术的核心是XMLHttpRequest对象(简称XHR),IE5是第一...

    实用的Ajax插件

    最实用的Ajax插件工具。是针对asp.net的一个ajax控件集,虽然ajax是javascript中实现的, 但是利用这个控件集,你可以不编写javascript,就实现ajax的很多效果 里面封装实现了很多ajax的漂亮效果,但是你只需要把...

    ajax图片上传插件

    Ajax图片上传插件是一种在网页上实现异步图片上传功能的技术解决方案。它通过Ajax(Asynchronous JavaScript and XML)技术,允许用户在不刷新整个页面的情况下,将图片数据发送到服务器进行处理,极大地提升了用户...

    ajax异步上传文件插件

    `ajaxfileupload.js`是一个常见的Ajax文件上传插件,它封装了文件上传的逻辑,提供了简单易用的API。使用这个插件,开发者可以轻松地在项目中集成文件上传功能。 1. **基本使用**:首先,需要引入`ajaxfileupload....

    N多AJAX插件,值得收藏

    例如,一个简单的GET请求可以这样编写: ```javascript $.ajax({ url: 'your-url', type: 'GET', success: function(data) { // 处理返回的数据 }, error: function() { // 处理错误 } }); ``` 2. **jQuery...

    GIS地图打点插件封装

    GIS(Geographic Information...总之,GIS地图打点插件封装是一个提高开发效率的工具,结合OpenLayers和jQuery,它简化了在Web应用中实现地图打点的过程,使得非GIS专业的开发者也能轻松地在地图上进行定位和展示数据。

    封装slider,jquery插件

    本教程将聚焦于如何封装一个基于jQuery的滑动插件,也就是"slider插件",这在网页设计中非常常见,用于创建吸引人的幻灯片展示效果。 首先,我们要理解什么是滑动插件(Slider Plugin)。滑动插件通常是一个自定义...

    jQuery封装插件原理教学 Demo

    一个简单的jQuery插件通常由以下部分组成: 1. **命名空间**:在jQuery对象上添加方法,通常使用`$.fn.extend`来实现,这里的`fn`是jQuery对象的别名,`extend`用于扩展函数。 2. **主函数**:这是插件的核心,...

    基于jQuery封装的tap事件插件

    本主题聚焦于一个特定的jQuery插件——“基于jQuery封装的tap事件插件”,这个插件是为了应对触屏设备(如智能手机和平板电脑)上的点击事件问题而设计的。在触屏设备上,原生的`click`事件存在延迟,通常在用户触摸...

    基于weui图片上传封装插件

    本项目"基于weui图片上传封装插件"是个人原创的,针对使用jQueryWeui框架的前端开发者,提供了一个实用且方便的图片上传解决方案。这个插件的核心功能在于将图片上传的过程进行封装,使得开发者无需深入了解上传技术...

Global site tag (gtag.js) - Google Analytics