• JavaScript学习笔记(四)Ajax


    1. XMLHttpRequest使用

    const xhr = new XMLHttpRequest()
    xhr.onreadystatechange = function() {
      if (xhr.readyState === 4) {
        if ((xhr.status >=200 && xhr.status < 300) || xhr.status === 304) {
          console.log(xhr.status, xhr.statusText, xhr.responseText, xhr.responseXML)
        }
      }
    }
    xhr.open('get', 'example.html', false)
    xhr.send(null)
    xhr.abort()
    xhr.setRequestHeader('key', 'value')
    xhr.getResponseHeader('key')
    xhr.getAllResponseHeaders()

    2. get

    function addURLParam(url, name, value) {
      url += (url.indexof('?') === -1 ? '?' : '&')
      url += encodeURIComponent(name) + '=' + encodeURIComponent(value)
      return url
    }

    3. post form

    // formData
    const data = new FormData()
    data.append('name', 'waite')
    xhr.send(data)
    
    const form = document.getElementById('user-info')
    xhr.send(new FormData(form))

    4. 超时

    xhr.timeout = 1000
    xhr.ontimeout = function() {
      console.log('timeout')
    }

    5. 重写响应的mime类型(必需在send方法之前)

    xhr.overrideMimeType('text/html')

    6. 进度事件

    xhr.onloadstart = function() {}
    xhr.onprogress = function(event) {
      event.target === xhr
      event.lengthComputable
      event.position //已接收
      event.totalSize // Content-Length 预期字节
    }
    xhr.onerror = function() {}
    xhr.onabort = function() {}
    xhr.onload = function(event) {
      event.target === xhr
    }
    xhr.onloadend = function() {}

    7. 跨域

    // 跨域
    // 请求头加origin
    origin: http:// www.nc.net
    // 服务器接受请求时,响应
    Access-Control-Allow-Origin: http://www.nc.net
    
    // XMLHttpRequest跨域
    传入绝对URL
    限制:
    1. 不能使用setRequestHeader()设置头部
    2. 不能发送和接收cookie
    3. getAllResponseHeaders()返回空字符串
    对于本地资源,用相对URL,对远程资源,用绝对URL
    
    xhr.withCredentials

    7.1 图像Ping

    var img = new Image()
    img.onload = img.onerror = function() {
      console.log('done)
    }
    img.src = "http://www.example.com/test?name=waite"
    // 1. 只能GET
    // 2. 无法访问服务器的响应文本

    7.2 JSONP

    客户端把callback函数和参数传给服务器,服务器拼接成js代码返回客户端。

    const handleFunc = function(data) {
      console.log(data)   
    }
    url = 'http://www.example.com/query.js?callback=handleFunc&code=aaa'
    const script = document.createElement('script')
    script.src = url
    document.getElementsByTageName('head')[0].appendChild(script)

    7.3 comet

    1. 短轮询
    浏览器向服务器定时发送请求,看有没有更新
    2. 长轮询
    浏览器发送请求后,服务器保持打开,直到有数据可发送

    7.4 Web Socket

    // 创建后马上尝试连接
    consr ws = new WebSocket('ws://www.example.com')
    ws.readyState // 0 正在建立 1 已经建立 2 正在关闭  3 已经关闭
    ws.close()
    // 只能发送文本
    ws.send('Heoll World!')
    ws.send(JSON.stringify(obj))
    
    ws.onmessage = function(event) {
      const data = event.data      
    }
    
    ws.onopen = function(){}
    ws.onerror = function(){}
    ws.onclose = function(event){
      event.wasClean
      event.code
      event.reason
    }
  • 相关阅读:
    HTML5数据推送SSE原理及应用开发
    用Docker构建分布式Redis集群
    开发者必备的12个JavaScript库
    分享:我用一天时间开发的 新年送祝福 微信手机网站(可在线体验附图)(要代码的留下邮箱)
    祝福csdn回望2014,展望2015 大致可以这样总结和展望
    对 云寻觅贴吧(http://tieba.yunxunmi.com/)的简要分析
    开源前夕先给大家欣赏一下我用C语言开发的云贴吧 网站自动兼容-移动、手机、PC自动兼容云贴吧
    舞蹈模特欣欣(六)棚拍私房 大家看看像小龙女(李若彤)吗?
    终于解决了贴吧手机版的一个重大BUG
    比基尼美女_人像摄影吧主题
  • 原文地址:https://www.cnblogs.com/zhoulixue/p/10759165.html
Copyright © 2020-2023  润新知