zoukankan      html  css  js  c++  java
  • 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
    }
  • 相关阅读:
    BZOJ3171: [Tjoi2013]循环格
    Luogu P1850 换教室(期望dp)
    Luogu P3825 [NOI2017]游戏(2-SAT)
    Luogu P3007 [USACO11JAN]大陆议会The Continental Cowngress
    Luogu P2272 [ZJOI2007]最大半连通子图(Tarjan+dp)
    Luogu P3209 [HNOI2010]平面图判定(2-SAT)
    Luogu P4171 [JSOI2010]满汉全席(2-SAT)
    Luogu P4782 【模板】2-SAT 问题(2-SAT)
    Luogu P2845 [USACO15DEC]Switching on the Lights 开关灯(bfs)
    Luogu P4933 大师(dp)
  • 原文地址:https://www.cnblogs.com/zhoulixue/p/10759165.html
Copyright © 2011-2022 走看看