请求

post比get安全一点,地址栏看不到你的信息.(但是post也会被抓包)

get发送表单数据,post请求表单

原生ajax请求

原生xhr

// 创建异步对象
var xhr = new XMLHttpRequest()

// 调用open方法,配置请求信息
xhr.open("POST", url, async) // async默认:true(执行异步操作)
xhr.open("GET", "/ashx/myzhuye/Detail.ashx?methodName=GetAllComment", async) // get请求参数拼接在URL后边

// post方法需要设置请求头
xhr.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')

// 发送请求,post请求传递的参数在这
xhr.send("methodName=GetAllComment&str1=str1&str2=str2")

// 注册回调函数
xhr.onreadystatechange = function(){
  if(xhr.status === 200 && xhr.readyState === 4){
    console.log(this.response)    
  }
}

// 终止请求(背景:表单检索修改查询条件后,上次的请求比本次还慢时,会出现bug,不是防抖节流能解决的,所以需要终止上次请求)
xhr.abort() //readyState将变为0

// readyState: 0:请求未初始化;1:服务器连接已建立;2:请求已接收;3:请求处理中;4:请求已完成,响应已就绪

jquery请求

基于xhr封装

let queryTruckAjax
if(queryTruckAjax) {
  queryTruckAjax.abort()
}

queryTruckAjax = $.ajax({
  url: 'url',
  type: post,
  contentType: 'application/json',
  dataType: 'json',
  async: true,(默认:true 异步,false:同步)
  cache: true,(默认:true,若为false:不会从浏览器缓存中加载请求信息)
  data: data,
  success: function(){},
  error: function(){}
})
  • contentType:设置传给服务器的格式

    • application/x-www-form-urlencoded(表单格式)

    jquery的ajax默认的格式,key1=value1&key2=value2。不能传复杂的json对象

    • application/json

    data需传json格式的字符串。不设置,可以传json对象

    • text/xml

    xml:面向数据,json:面向对象和结构
    data: "<user><name>"+name+"</name><pwd>"+pwd+"</pwd></user>"

    • multipart/form-data

    用于文件上传提交文件

  • dataType:收到服务器的格式

    • json
    • html
    • xml

axios请求

基于xhr封装,基于promise的HTTP库

// request.js
import axios from 'axios'

const service = axios.create({
  baseURL: process.env.BASE_URL + 'manage/', // api 的 base_url
  // timeout: 5000 // request timeout
})

service.interceptors.request.use(
  config => {
    if (store.getters.token) {
      // 让每个请求携带token
      config.headers['SYJusticeAuthorization'] = getToken()
    }
  }
)

service.interceptors.reponse.use(
  response => {
    if(response.data.status !== 0){
      // 不成功 do something
    }else {
      // 成功
      return response.data
    }
  }
)

export default service
// 调用
import request from '@/utils/request'

export function loginByUsername(username, password) {
  const data = {
    username,
    password
  }
  return request({
    url: 'syUser/login',
    method: 'post',
    data: {
      data
    },
    // 取消请求
    cancelToken: new axios.CancelToken((c) => {
      that.source = c;
    })
  })
}

fetch

windows内置的(关注分离的设计思想),和xhr同级别,不用下载直接使用,promise风格的。缺点是低版本浏览器不支持

const contronller = new AbortContronller()

fetch('www.baidu.com').then(
  res => {
    console.log('联系服务器成功', res.json())
    return res.json()  // Promise 实例对象
  }, 
  err => {
    console.log('联系服务器失败', err)
    return new Promise()  // 如果不return,默认非Promise实例,返回undefined,下边还会then还会执行
  }
).then(
  res => console.log('获取数据成功了', res),
  err => console.log('获取数据失败了', err)
)

// 终止请求
contronller.abort()
// 优化
fetch('www.baidu.com').then(
  res => {
    console.log('联系服务器成功', res.json())
    return res.json()  // Promise 实例对象
  }
).then(
  res => console.log('获取数据成功了', res)
).catch(
  // 统一处理错误
  err => console.log('请求出错', err)
)
//继续优化
try {
  const response = await fetch('www.baidu.com')
  const data = await response.json()
} catch(err) {
  console.log('请求出错', err)
}

results matching ""

    No results matching ""