js原生Ajax的封装和原理详解


Posted in Javascript onMarch 11, 2017

原理及概念

AJAX即“Asynchronous Javascript And XML”(异步JavaScript和XML),是一种用于创建快速动态网页的技术。

动态网页:是指可以通过服务器语言结合数据库随时修改数据的网页。

静态网页,随着html代码的生成,页面的内容和显示效果就基本上不会发生变化了——除非你修改页面代码。

AJAX = 异步 JavaScript和XML(标准通用标记语言的子集)。

AJAX 是与服务器交换数据并更新部分网页的艺术,在不重新加载整个页面的情况下。

Ajax的优势

AJAX 在浏览器与 Web 服务器之间使用异步数据传输(HTTP 请求),这样就可使网页从服务器请求少量的信息,而不是整个页面。

AJAX 可使因特网应用程序更小、更快,更友好。

AJAX 是一种独立于 Web 服务器软件的浏览器技术。

AJAX 基于下列 Web 标准:

JavaScriptXMLHTMLCSS在 AJAX 中使用的 Web 标准已被良好定义,并被所有的主流浏览器支持。AJAX 应用程序独立于浏览器和平台。

Web 应用程序较桌面应用程序有诸多优势;它们能够涉及广大的用户,它们更易安装及维护,也更易开发。

不过,因特网应用程序并不像传统的桌面应用程序那样完善且友好。

通过 AJAX,因特网应用程序可以变得更完善,更友好。

Ajax的异步

异步:是相对于同步而言的,我们学过的定时器也是异步的一种,也就是其他程序不需要等待定时器的代码全部执行完毕以后才能执行代码。因为定时器有可能是无限循环执行代码的,如果等待定时器执行完毕那么其他的代码将永远无法运行。所以异步编程就是相对于其他代码是独立完成的。也就是上面所说的ajax是独立于浏览器平台的。

Tip:事件也是异步执行的,事件是发生某件事情后才会执行代码的。
同步:我们之前所写的代码除了定时器和事件大部分都是同步执行的。也就是同一个代码块中都是从上到下执行的。

Ajax的工作原理

Ajax 核心对象XMLHttpRequest
var _hr=new window.XMLHttpRequest();
通过该实例化的对象向服务器
发出请求,等待服务器响应
服务器响应完成后客户端再处理
服务器端响应的数据。
Ajax请求服务器的过程中有5个状态
0:表示请求服务器之前
1:表示打开远程服务器链接对应open方法
2:表示向服务器发送数据对应send方法
3:表示服务器响应过程中并未结束
4:表示服务器响应完成

/**
 * 创建XMLHttpRequest对象
 * @param _method 请求方式: post||get
 * @param _url 远程服务器地址
 * @param _async 是否异步
 * @param _parameter 向服务器发送数据
 * @param _callBack 回调函数
 */
function parameterDeal(_parameter){
  var _sender="";
  if(_parameter instanceof Object){
    for(var k in _parameter){
      _sender+=k+"="+_parameter[k]+"&";
    }
    return _sender.replace(/\&$/g,"");
  }else{
    return _parameter;
  }
}
function createXMLHttpRequest(){
  try{
    return new window.XMLHttpRequest();
  }catch(e){
    try{
      return new ActiveXObject("MSXML2.XMLHTTP.6.0");
    }catch(e){
      try{
        return new ActiveXObject("MSXML2.XMLHTTP.3.0");
      }catch(e){
        try{
          return new ActiveXObject("MSXML2.XMLHTTP");
        }catch(e){
          try{
            return new ActiveXObject("Microsoft.XMLHTTP");
          }catch(e){
            throw new Error("该浏览器版本太低,已经被大部分市场淘汰,请升级!!!");
            return;
          }
        }
      }
    }
  }
}
function ajaxRequest(_method,_url,_async,_parameter,_callBack){
  var _ajax=createXMLHttpRequest();
  if(_ajax){
    _ajax.onreadystatechange=function(){
      if(_ajax.readyState==4 && _ajax.status==200){
        _callBack(_ajax.responseText);
      }
    }
    _ajax.open(_method,_url,_async);
    _ajax.setRequestHeader("content-type","application/x-www-form-urlencoded;charset=utf-8");
    _ajax.send(parameterDeal(_parameter));
  }
}

这是封装好了的原生Ajax,在使用的过程中,只需要新建一个js文件,将这段代码放进去,什么都不要改,在HTML页面引入之后,调用 ajaxRequest()函数,传入你想要的参数,就可以正常使用了。

此方法纯属个人封装,有更精简方法的朋友欢迎与我分享!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript-世界上误解最深的语言分析
Aug 12 Javascript
JS方法调用括号的问题探讨
Jan 24 Javascript
Jquery中offset()和position()的区别分析
Feb 05 Javascript
js实现checkbox全选、不选与反选的方法
Feb 09 Javascript
使用 jQuery.ajax 上传带文件的表单遇到的问题
Oct 31 Javascript
javaScript中定义类或对象的五种方式总结
Dec 04 Javascript
jQuery实现搜索页面关键字的功能
Feb 16 Javascript
$.browser.msie 为空或不是对象问题的多种解决方法
Mar 19 Javascript
vue音乐播放器插件vue-aplayer的配置及其使用实例详解
Jul 10 Javascript
JavaScript之事件委托实例(附原生js和jQuery代码)
Jul 22 jQuery
详解Angular模板引用变量及其作用域
Nov 23 Javascript
vue使用echarts图表自适应的几种解决方案
Dec 04 Vue.js
ThinkPHP+jquery实现“加载更多”功能代码
Mar 11 #Javascript
Bootstrap的Carousel配合dropload.js实现移动端滑动切换图片
Mar 10 #Javascript
基于Bootstrap框架实现图片切换
Mar 10 #Javascript
angularjs ui-router中路由的二级嵌套
Mar 10 #Javascript
AngularJS ui-router (嵌套路由)实例
Mar 10 #Javascript
微信小程序手势操作之单触摸点与多触摸点
Mar 10 #Javascript
Web纯前端“旭日图”实现元素周期表
Mar 10 #Javascript
You might like
PHP面向接口编程 耦合设计模式 简单范例
2011/03/23 PHP
最新版本PHP 7 vs HHVM 多角度比较
2016/02/14 PHP
thinkPHP框架实现的短信接口验证码功能示例
2018/06/20 PHP
用jquery和json从后台获得数据集的代码
2011/11/07 Javascript
JavaScript操作XML 使用百度RSS作为新闻源示例
2012/02/17 Javascript
js如何调用qq互联api实现第三方登录
2014/03/28 Javascript
jquery实现的鼠标拖动排序Li或Table
2014/05/04 Javascript
特殊情况下如何获取span里面的值
2014/05/20 Javascript
Javascript基础知识(二)事件
2014/09/29 Javascript
js实现感应鼠标图片透明度变化的方法
2015/02/20 Javascript
javascript检测移动设备横竖屏
2016/05/21 Javascript
AngularJS过滤器filter用法实例分析
2016/11/04 Javascript
Node.js常用工具之util模块
2017/03/09 Javascript
JavaScript实现焦点进入文本框内关闭输入法的核心代码
2017/09/20 Javascript
微信小程序自动客服功能
2017/11/02 Javascript
RequireJS用法简单示例
2018/08/20 Javascript
微信小程序map组件结合高德地图API实现wx.chooseLocation功能示例
2019/01/23 Javascript
微信小程序实现的图片保存功能示例
2019/04/24 Javascript
React中使用UMEditor的方法示例
2019/12/27 Javascript
一起来了解一下JavaScript的预编译(小结)
2021/03/01 Javascript
python 生成目录树及显示文件大小的代码
2009/07/23 Python
python编写简单爬虫资料汇总
2016/03/22 Python
Python使用剪切板的方法
2017/06/06 Python
解决vscode python print 输出窗口中文乱码的问题
2018/12/03 Python
python多线程共享变量的使用和效率方法
2019/07/16 Python
一文轻松掌握python语言命名规范规则
2020/06/18 Python
python名片管理系统开发
2020/06/18 Python
Virtualenv 搭建 Py项目运行环境的教程详解
2020/06/22 Python
opencv实现图像平移效果
2021/03/24 Python
本科生求职简历的自我评价
2013/10/21 职场文书
应届大学生求职的自我评价
2013/11/17 职场文书
互联网创业计划书写作技巧攻略
2014/03/23 职场文书
欢迎领导标语
2014/06/27 职场文书
日语系毕业求职信
2014/07/27 职场文书
幼儿园家长工作总结2015
2015/04/25 职场文书
jdbc中自带MySQL 连接池实践示例
2022/07/23 MySQL