当前位置:   article > 正文

Ajax的面向对象的封装(ES5和ES6)ajax+php_ajax是es5还是es6的

ajax是es5还是es6的

我们来捋一下Ajax的概念,JS语言是单线程的语言、异步与同步。

JS是一门单线程的语言,所以JS语言写出来的程序也是单线程的程序。

学习ajax首先需要了解在编程中的异步与同步的概念。

异步和同步

  • 同步:程序发出请求需要等待当前请求执行结束才能进行下一步的操作。

  • 异步:程序发出请求不需要等待当前请求结束就能进行下一步的操作。

 

ajax的实现

我们要完成一个基本的ajax交互操作只需要四步即可。

  • 创建异步对象:

     let xhr = new XMLHttpRequest();

  • 指定请求的方式/端口/文件:

     xhr.open('get','./a.txt',true);

  • 发送请求:

      xhr.send();

  • 异步对象监听状态的变化(通过状态码):

       xhr.addEventListener('readystatechange',function(e){

                  if( xhr.readyState == 4 ){

                           console.log(xhr.responseText);

                  }

         } ,false);

0:请求为初始化

1:服务器连接已建立

2:请求已接收

3:请求处理中

4:请求已完成,且响应已就绪

这是最基本的实现,然后接下来进行对ajax的封装,使用es5和es6的两种方式进行面向对象的封装:

  1. <script>
  2. let a = new ajax({
  3. url:"./../地址",// 必填
  4. method:"post",// 选填
  5. data:"数据" // 这是 参数
  6. //相当于 对象参数的一样的参数
  7. }).then(function(data){
  8. // data就是后台响应回来的数据
  9. console.log(data)
  10. })
  11. </script>

es5的方式

  1. function ajax(options){
  2. // 初始化数据
  3. this.url = options.url
  4. this.method = options.method || "get"
  5. this.data = options.data || {}
  6. // 创建xhr
  7. this.xhr = new XMLHttpRequest()
  8. if( this.method === "get" ){// get
  9. this.get()
  10. }else{// post
  11. this.post()
  12. }
  13. }
  14. // 构造函数原型上的属性和方法将来都可以被该构造函数下所创建的对象所共有
  15. ajax.prototype.get = function(){
  16. // 对象的方法 this 指向了对象本身
  17. this.xhr.open("get",this.url+"?"+this.data,true)
  18. this.xhr.send()
  19. }
  20. ajax.prototype.post = function(){
  21. // 对象的方法 this 指向了对象本身
  22. this.xhr.open("post",this.url)
  23. this.xhr.setRequestHeader("content-type","application/x-www-form-urlencoded")
  24. this.xhr.send(this.data)
  25. }
  26. ajax.prototype.then = function(fn){
  27. this.xhr.onreadystatechange = function(){
  28. // this指向了事件的触发者, a.xhr
  29. if( this.readyState === 4 && this.status === 200 ){
  30. fn(this.responseText)
  31. }
  32. }
  33. }

es6的方式:

  1. class ajax{
  2. constructor(options){
  3. // 对象的解构赋值
  4. let{ method="get",url,data="" } = options
  5. // 创建xhr
  6. this.xhr = new XMLHttpRequest()
  7. // 判断
  8. if( method === "get" ){
  9. this.get(url,data)
  10. }else{
  11. this.post(url,data)
  12. }
  13. }
  14. // 在ES6的class类中的写法,原型上的方法是和构造器同级的
  15. get(url,data){
  16. this.xhr.open("get",url+"?"+data,true)
  17. this.xhr.send()
  18. }
  19. post(url,data){
  20. this.xhr.open("post",url,true)
  21. this.xhr.setRequestHeader("content-type","application/x-www-form-urlencoded")
  22. this.xhr.send(data)
  23. }
  24. then(fn){
  25. this.xhr.onreadystatechange = ()=>{
  26. if( this.xhr.readyState === 4 && this.xhr.status === 200 ){
  27. fn(this.xhr.responseText)
  28. }
  29. }
  30. }
  31. }

感谢关注!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/148138
推荐阅读
相关标签
  

闽ICP备14008679号