美文网首页
ajax学习总结

ajax学习总结

作者: 前端收藏家 | 来源:发表于2017-11-13 10:17 被阅读10次

ajax是什么?

如果google一波,你能搜到很多专业的解答,但是这里只通俗的讲一下,就是一个能让你以异步的方式去请求数据的方案。从而获得无等待,无刷新的优秀体验。

ajax怎么用?

  1. 说到ajax,就不得不提XMLHttpRequest对象,通过这个对象创建的实例,你就可以发起神奇的ajax请求了。
  var xhr = new XMLHttpRequest();
  xhr.open('get', url, true);
  xhr.onreadystatechange = function(){
    if(xhr.readyState === 4){
      if(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304){
        console.log(xhr.responseText);
      }else{
        console.log('ajax failed!');
      }
    }
  }
  xhr.send(null);

这样就完成了一个最简单的ajax请求。

ajax请求是一个异步请求。如果你直接将上面那段代码放在一个函数里面,将console.log(xhr.responseText)改成return xhr.responseText,调用函数后你是拿不到真正的返回值的。你拿到的是undefined。因为这个是一个异步请求。如果你想封装到一个方法中,可以这样写:

  function getJSON(url){
    return new Promise(function(resolve, reject){
      var xhr = new XMLHttpRequest();
      xhr.open('get', url, true);
      xhr.onreadystatechange = function(){
        if(xhr.readyState == 4){
          if(xhr.status == 200){
            return resolve(JSON.parse(xhr.responseText));
          }else{
            return reject('Get request failed');
          }
        }
      }
      xhr.send(null);
    })
  }

通过借助es6的Promise对象,可以以同步的方式执行异步的代码。当然,想实现这种效果的方式还有很多种,但是这里只是为了说明这是一个异步操作。

  var data = getJSON('/server');

就能直接拿到相应的值并赋值给data。

XMLHttpRequest对象

readyState值 状态 描述
xhr.readyState === 0 unsent open方法还未被调用
xhr.readyState === 1 opened send方法还未被调用
xhr.readyState === 2 headers-received已获取响应头 send方法已调用,响应头和响应状态已经返回
xhr.readyState === 3 loading正在下载响应体 响应体下载中; responseText中已经获取了部分数据.
xhr.readyState === 4 done 整个请求过程已经完毕.

一般我们只关注xhr.readyState === 4的阶段,因为这个时候已经拿到完整的数据了。

onreadystatechange函数能够监听请求的状态值变化,所以我们可以通过这个方法,监听状态值 == 4的时机,然后拿到请求返回的内容。

实际使用中,通过这个实例可以发挥更多神奇的作用。比如:

  • 实现文件上传进度条
  function updateFile(){
    var file = document.querySelect('input[type="file"]').files[0];
    var form = new FormData();
    form.append('file', file);
    var xhr = new XMLHttpRequest();
    xhr.open('post', '/serverURL', true);
    xhr.onload = function(e){
      console.log(e.responseText);
    };
    xhr.upload.addEventListener('progress', progressFun, false);
    xhr.send(form);
  }
  function progressFun(e){
    var progressBar = document.querySelect('#progressBar');
    if(e.lengthComputable){
      progressBar.max = e.total;
      progressBar.value = e.loaded;
    }
  }

ajax实际使用中可能会遇到的问题

1. 最常见的问题:跨域

常见跨域解决方法

2. 状态值 == 200,但是没有拿到正确的内容

有的时候虽然请求成功了并返回,但是其实出错了,这个时候需要给xhr.onerror绑定事件,有的错误可能需要使用这个方法去捕获。

3. 本地文件发起请求可能报错

有的浏览器因为安全策略原因,限制了本地文件的ajax请求。可以搭建一个服务端环境发起请求,或者使用IE(IE貌似没有这个限制)。

相关文章

  • ajax学习总结

    1、什么是ajax? ajax是一种可以不刷新页面,而实现与服务端通信的的方式,使用ajax的主要方式是XMLHt...

  • ajax学习总结

    ajax是什么? 如果google一波,你能搜到很多专业的解答,但是这里只通俗的讲一下,就是一个能让你以异步的方式...

  • AJAX总结链接

    AJAX总结链接

  • 总结js常用函数和常用技巧

    学习过程中总结的干货,包括常用函数、常用js技巧、常用正则表达式等。 Ajax封装 使用方法: 后台响应Ajax ...

  • Ajax总结

    今天封装了一个简单的ajax。所以顺便总结一下。 #######ajax概念 ajax:Asynchronous ...

  • Ajax使用专题

    参考:ajax总结 原生Ajax level 1 XMLHTTPRequest 属性,方法和事件 XMLHTTPR...

  • ajax学习笔记

    Ajax学习笔记 Ajax简介 1. Ajax是什么? Ajax : Asynochronous javascri...

  • js中ajax学习总结

    1、AJAX 简介 AJAX(音译为:阿贾克斯) = Asynchronous JavaScript and XM...

  • js中ajax学习总结

    1、AJAX 简介 AJAX(音译为:阿贾克斯) = Asynchronous JavaScript and XM...

  • ajax小结

    在开发过程中ajax是必须的,对近期在ajax的使用上的心得进行总结。 一、关于ajax AJAX = Async...

网友评论

      本文标题:ajax学习总结

      本文链接:https://www.haomeiwen.com/subject/rxiamxtx.html