最新公告
  • 欢迎您光临起源地模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • 你还不会AJAX?

    正文概述 掘金(Old_Framer)   2021-03-10   565

    什么是ajax

    ajax使用手册

    1. 核心ajax经典四步骤;
      • 创建一个XMLHttpRequest实例
      • 调用实例的open方法设置请求方法,请求地址,是否异步请求(默认true,异步请求);参数:open(method,url,async)
      • 监听实例的readystate改变
      • 发送请求
    let xhr = new XMLHttpRequest();
    xhr.open("get","./1.json");
    xhr.onreadystatechange = () => {}
    xhr.send();
    
    1. xhr实例的属性详解
      • readyState: 属性的状态值(原型链上找到)
        • 0 UNSENT 请求已经创建但未初始化
        • 1 OPENED 调用完open方法
        • 2 HEADERS_RECEIVED 请求头返回(head请求就可以在这个时间返回)
        • 3 LOADING 响应主体信息正在返回
        • 4 DONE 响应主体信息返回了
      • resopnse,responseText(一般为JSON字符串,需要转义),responseXML,responseType(响应的格式:"arraybuffer" , "blob" , "document" , "json" , and "text" ),responseURl(最终访问的url,包括重定向后的)
      • status: 网络状态码
      • statusText: 响应完成返回的状态信息
      • timeout: 超时时间
      • withCredentials: 允许携带资源凭证
      • getResponseHeader(''): 获取对应的响应头信息
      • getAllResponseHeaders(): 获取所有的响应头信息
      • setRequestHeader('',''): 设置请求头信息
      • upload: 上传的状态(常用在文件上传),通常使用xhr.upload.onprogress来了解文件上传的进度(e.loaded/e.total)
      • onreadystatechange(): 监听状态值变化,做相应的处理
      • ontimeout(): 设置超时时做的处理
      • onabort(): 设置中断的时候做的处理(例如在断网时存储已经做完的事情,常用在文件上传中)
      • onloadstart(): 在请求发送前触发的函数在状态值1-2间
      • onload(): 在状态值变为4之后触发
      • onloaded(): 在状态值为2(未响应)或者4(响应了)触发
      • onprocgress(): 在上传的时候,状态值为3以后触发,传入ProgressEvent,可以通过e.loaded/e.total来知道进度
      • onerror(): 在请求出错后执行(通常在断网时触发)
    2. 请求方式
      • GET类: get,head,options,delete...

      • POST类: post,put,patch...

      • 两者的区别:

        • GET和POST在官方定义中是没有明确的区别的,但是浏览器或者开发的时候,都有一套约定俗成的规范:
        • GET传递的信息不如POST多,因为URL有长度限制「IE->2KB」,超过这个长度的信息会被自动截掉,这样导致传递内容过多,最后服务器收到的信息是不完整的!!POST理论上是没有限制的,但是传递的东西越多,速度越慢,可能导致浏览器报传输超时的错误,所以实际上我们会自己手动做限制!!
        • GET会产生缓存「浏览器默认产生的,不可控的缓存」:两次及以上,请求相同的API接口,并且传递的参数也一样,浏览器可能会把第一次请求的信息直接返回,而不是从服务器获取最新的信息!!xhr.open('GET', './1.json?lx=1&name=xxx&_'+Math.random()),在请求URL的末尾设置随机数,以此来清除GET缓存的副作用或者在webpack打包的时候做hash处理
        • POST相对于GET来讲更安全一些:GET传递的信息是基于URL末尾拼接,这个随便做一些劫持或者修改,都可以直接改了,而POST请求主体信息的劫持,没那么好做!!但是“互联网面前,人人都在裸奔”!!所以不管什么方式,只要涉及安全的信息,都需要手动加密「因为默认所有的信息传输都是明文的」!!
    3. HTTP状态码:
      • 200 OK 请求成且响应完成
      • 202 Accepted :服务器已接受请求,但尚未处理(异步)
      • 204 No Content:服务器成功处理了请求,但不需要返回任何实体内容
      • 206 Partial Content:服务器已经成功处理了部分 GET 请求(断点续传 Range/If-Range/Content-Range/Content-Type:”multipart/byteranges”/Content-Length….)
      • 301 Moved Permanently 永久转移 「域名迁移」
      • 302 Move Temporarily 临时转移 「负载均衡」post请求方法可能会被转换为get,无法预测请求方法
      • 304 Not Modified 走协商缓存
      • 305 Use Proxy 走代理
      • 307 Temporary Redirect 临时 重定向 可以预测请求方法
      • 400 Bad Request : 请求参数有误
      • 401 Unauthorized:权限(Authorization)
      • 403 Forbidden 服务器拒绝执行「为啥可能会已响应主体返回」
      • 404 Not Found 地址错误
      • 405 Method Not Allowed 请求方式不被允许
      • 408 Request Timeout 请求超时
      • 500 Internal Server Error 未知服务器错误
      • 503 Service Unavailable 超负荷
      • 505 HTTP Version Not Supported
      • ......
    4. 发送的主体信息
      • form-data: 主要用于文件的上传或者表单数据提交
        xhr.setRequestHeader('Content-Type', 'multipart/form-data');
        ------
        let fd = new FormData;
        fd.append('lx', 0);
        fd.append('name', 'xxx');
        xhr.send(fd);
        
      • application/x-www-form-urlencoded: "lx=1$name=xx"的格式
        // 可以使用第三方工具qs.js,支持qs.stringify和qs.parse进行对象和urlencoded字符串之间的转换
        let qs = require("qs");
        xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
        ------
        xhr.send(qs.stringify({
            lx: 0,
            name: 'xxx'
        }));
        
      • raw: 字符串格式
        普通字符串  -> text/plain
        JSON字符串 -> application/json  => JSON.stringify/parse  「常用」
        XML格式字符串 -> application/xml
        ......
        
      • binary进制数据文件[buffer/二进制]: 一般用于大文件上传和断点续传

    起源地下载网 » 你还不会AJAX?

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元