当前位置: 首页 > article >正文

axios请求中的data和params的区别

一、

http:超文本传输协议,规定浏览器和服务器之间传输数据的格式

域名:标记访问服务器在互联网中的方位

资源路径:标记资源在服务器下的具体位置

url查询参数:浏览器提供给服务器的额外信息,让服务器返回浏览器想要的数据

语法:http://xxxx.com/xxx/xxx?参数名1=值1&参数值2=值2

axios查询参数

语法:使用axios提供的params选项

axios({
    url:'目标资源地址',
    params:{
        参数名:值
    }
})

二、常用请求方式

请求方法操作
get获取数据
post提交数据
put修改数据(全部)
delete删除数据
patch修改数据(部分)

aixos请求配置

url:请求的url网址

method:请求的方法,get可以省略

data:提交数据

axios({
    url:'目标资源地址',
    method:'请求方法',
    data:{
        参数名:值
    }
})

data和params的区别

  • data 用于在发送请求时附带的数据,通常用于 POSTPUTPATCH 等请求方法。

  • 发送的 data 会被作为请求体(request body)发送给服务器。

axios({
  url: 'https://example.com/api/resource',
  method: 'POST',
  data: {
    name: 'John',
    age: 30
  }
});

//简写
axios.post('https://example.com/api/resource', {
  name: 'John',
  age: 30
});
  • params 用于发送 URL 查询参数,通常用于 GET 请求。

  • 这些参数会被附加到 URL 的查询字符串部分。

axios({
  url: 'https://example.com/api/resource',
  method: 'GET',
  params: {
    id: 123,
    sort: 'asc'
  }
});

//简写
axios.get('https://example.com/api/resource', {
  params: {
    id: 123,
    sort: 'asc'
  }
});

请求报文:浏览器按照http协议要求的格式,发送给服务器的内容

(请求行,请求头,空行,请求体)

响应报文:浏览器按照http协议要求的格式,返回给给服务器的内容

(响应行:协议,http响应状态码,状态信息

   响应头:以键值对的格式携带的附加信息,比如:content-type

   空行:分割响应头,空行之后的是服务器返回的资源

   响应体:返回的资源)

http响应状态码

用来表明请求是否成功

404服务器找不到资源

状态码说明
1xx信息
2xx成功
3xx重定向消息
4xx客户端错误
5xx服务器错误

token

token访问权限的令牌,本质上是一串字符串。正确登录后,由后端签发并返回

作用:判断是否有登录状态等,控制访问权限

前端只能判断token有无,后端才能判断token的有效性。

判断有无token,没有强制跳转到登录页;登录成功后,保存token令牌字符串到本地,并跳转到内容页面。

const token =localStorage.getItem('token')
if(!token){
    location.href='../login.html'
}

//登录请求
localStorage.setItem('token',res.data.data)
setTimeout(()=>{
    location.href='../content.html'
},1500)

axios请求拦截器(携带token)

发起请求前,触发的配置函数,对请求参数进行额外配置

axios.interceptors.request.use((config)=>{
    const token =localStorage.getItem('token')
    token && (config.headers.Authorization=`Bear ${token}`)
    return config
},(error)=>{
    return Promise.reject(error)
})

axios相应拦截器

响应回到then/catch之前,处罚的拦截函数,对响应结果的统一处理。

状态为2xx触发成功回调,其他则触发失败的回调函数

axios.interceptors.response.use((response)=>{
    const result=response.data
    return result
},(error)=>{
    if(error?.response?.status===401){
        alert('token过期')
        localStorage.clear()
        location.href='../login.html'
    }
    return Promise.reject(error)
})

富文本编辑器

带样式,多格式的文本,在前端一般使用标签配合内联样式实现

快速开始 | wangEditor

使用:wangEditor

编辑器函数,创建工具栏

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link href="https://unpkg.com/@wangeditor/editor@latest/dist/css/style.css" rel="stylesheet">
    <style>
        #editor—wrapper {
          width: 600px;
          border: 1px solid #ccc;
          z-index: 100; /* 按需定义 */
        }
        #toolbar-container { border-bottom: 1px solid #ccc; }
        #editor-container { height: 500px; }
      </style>
</head>
<body>
    <div id="editor—wrapper">
        <div id="toolbar-container"><!-- 工具栏 --></div>
        <div id="editor-container"><!-- 编辑器 --></div>
    </div>
</body>
</html>
<script src="https://unpkg.com/@wangeditor/editor@latest/dist/index.js"></script>
<script>
    //创建编辑器函数,创建工具栏函数
    const { createEditor, createToolbar } = window.wangEditor
    //编辑器配置对象
    const editorConfig = {
        placeholder: 'Type here...',
        onChange(editor) {
          const html = editor.getHtml()
          console.log('editor content', html)
          // 也可以同步到 <textarea>
        }
    }
    //创建编辑器
    const editor = createEditor({
        selector: '#editor-container',//创建的位置
        html: '<p><br></p>',//默认内容
        config: editorConfig,//配置项
        mode: 'default', // or 'simple'
    })

    //工具栏配置对象  
    const toolbarConfig = {}
    //创建工具栏
    const toolbar = createToolbar({
        editor,
        selector: '#toolbar-container',
        config: toolbarConfig,
        mode: 'default', // or 'simple'
    })
</script>

上传图片

准备标签结构和样式

选择文件并保存在FormData

单独上传图片并得到图片URL地址

回显并切换img标签(隐藏+号上传标签)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .cover .place{
            width: 200px;
            height: 200px;
            text-align: center;
            font-size: 40px;
            line-height: 200px;
            border:1px solid #ddd;
            color:#aaa;
            cursor:pointer;
            display: inline-block;
            vertical-align: top;
        }
        .cover img{
            width: 200px;
            height: 200px;
            vertical-align: top;
        }
        .cover .rounded{
            display: none;
        }
        .show{
            display: inline-block !important;
        }
        .hide{
            display: none !important;
        }
    </style>
</head>
<body>
    <div class="cover">
        <label for="img">封面:</label>
        <label for="img" class="place">+</label>
        <input type="file" class="img-file" name="img" id="img" hidden>
        <img src="" class="rounded">
    </div>
</body>
</html>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script>
    document.querySelector('.img-file').addEventListener('change',async(e)=>{
        const file=e.target.files[0]
        // const fd=new ForemData()
        // fd.append('image',file)
        // //body参数(application/form-data)
        // const res=await axios({
        //     url:'xxxx',
        //     method:'post',
        //     data:fd
        // })
        // console.log('res',res);
        // const imgUrl=res.data.data.url
        // document.querySelector('.rounded').src=imgUrl
        // document.querySelector('.rounded').classList.add('show')
        // document.querySelector('.place').classList.add('hide')
        const objectURL = URL.createObjectURL(file); // 创建临时 URL
        const imgUrl=objectURL
        console.log('imgUrl', imgUrl);
        
        document.querySelector('.rounded').src=imgUrl
        document.querySelector('.rounded').classList.add('show')
        document.querySelector('.place').classList.add('hide')
    })
    //点击ing可以重新切换封面
    document.querySelector('.rounded').addEventListener('click',()=>{
        document.querySelector('.img-file').click()
    })
</script>
<!DOCTYPE html>
<html lang="en">
 
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <link href="https://unpkg.com/@wangeditor/editor@latest/dist/css/style.css" rel="stylesheet">
  <style>
    .cover .place{
        width: 200px;
        height: 200px;
        text-align: center;
        font-size: 40px;
        line-height: 200px;
        border:1px solid #ddd;
        color:#aaa;
        cursor:pointer;
        display: inline-block;
        vertical-align: top;
    }
    .cover img{
        width: 200px;
        height: 200px;
        vertical-align: top;
    }
    .cover .rounded{
        display: none;
    }
    .show{
        display: inline-block !important;
    }
    .hide{
        display: none !important;
    }
    #editor—wrapper {
       width: 600px;
       border: 1px solid #ccc;
       z-index: 100; /* 按需定义 */
     }
    #toolbar-container { border-bottom: 1px solid #ccc; }
    #editor-container { height: 300px; }
</style>
</head>
 
<body>
  <form >
    <input type="text" required name="username"><br>
    <input type="password" name="password"><br>
    <div class="cover">
        <label for="img">封面:</label>
        <label for="img" class="place">+</label>
        <input type="file" class="img-file" name="img" id="img" hidden>
        <img src="" class="rounded">
    </div>
    <div id="editor—wrapper"  name="content">
        <div id="toolbar-container"><!-- 工具栏 --></div>
        <div id="editor-container"><!-- 编辑器 --></div>
        <textarea name="content" class="publish-content hide" ></textarea>
    </div>
    <button class="btn">提交</button>
  </form>
 
<script src="./1.form-serialize.js"></script>
<script src="https://unpkg.com/@wangeditor/editor@latest/dist/index.js"></script>
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
<script>
    //上传图片
    document.querySelector('.img-file').addEventListener('change',async(e)=>{
        const file=e.target.files[0]
        const objectURL = URL.createObjectURL(file); // 创建临时 URL
        const imgUrl=objectURL
        document.querySelector('.rounded').src=imgUrl
        document.querySelector('.rounded').classList.add('show')
        document.querySelector('.place').classList.add('hide')
    })
    //点击ing可以重新切换封面
    document.querySelector('.rounded').addEventListener('click',()=>{
        document.querySelector('.img-file').click()
    })
    //创建编辑器函数,创建工具栏函数
    const { createEditor, createToolbar } = window.wangEditor
    const editorConfig = {
        placeholder: 'Type here...',
        onChange(editor) {
          const html = editor.getHtml()
          console.log('editor content', html)
          document.querySelector('.publish-content').value=html
          // 也可以同步到 <textarea>
        }
    }
    const editor = createEditor({
        selector: '#editor-container',//创建的位置
        html: '<p><br></p>',//默认内容
        config: editorConfig,//配置项
        mode: 'default', // or 'simple'
    }) 
    const toolbarConfig = {}
    const toolbar = createToolbar({
        editor,
        selector: '#toolbar-container',
        config: toolbarConfig,
        mode: 'default', // or 'simple'
    })
    //提交
    document.querySelector('.btn').addEventListener('click', async() => {
        const form = document.querySelector('form');
        const data = serialize(form, { hash: true, empty: true });
        data.cover={
          type:1,//封面类型
          images:[document.querySelector('.rounded').src]//封面地址
        }
        console.log(data);
        try{
            const res=await axios({
              url:'',
              method:'post',
              data
            })
            alert('发布成功')
            form.reset()
            location.href='../content.html'
        }catch{
            alert('发布失败')
        }

    })
  </script>
</body>
</html>


http://www.kler.cn/a/379925.html

相关文章:

  • DCN网络进行新冠肺炎影像分类
  • 第三百零八节 Log4j教程 - Log4j日志到数据库
  • Armv8的安全启动
  • Vue3版本的uniapp项目运行至鸿蒙系统
  • qt QTabWidget详解
  • 代码随想录算法训练营第二十一天|669修剪二叉搜索树 、108将有序数组转换为二叉搜索树、538把二叉搜索树转换为累加树
  • 科普之使用Lableme图像标注—盲道分割与目标检测
  • 参数失配(Mismatch)
  • 文件系统上云的挑战
  • 计算机启动过程中各个步骤
  • w018基于Springboot的母婴商城系统
  • NLP领域的经典算法和模型
  • 从0开始搭建一个生产级SpringBoot2.0.X项目(八)SpringBoot 使用Redis
  • Java面向对象 C语言字符串常量
  • CSS 超出一行省略号...,适用于纯数字、中英文
  • 百货零售行业信息化蓝图整体规划方案|165页PPT
  • 深度强化学习(DRL)发展历程
  • 分布式数据库:核心概念、架构设计及应用实践
  • 记录一次node节点异常的排查
  • ssm校园线上订餐系统的设计与实现+vue
  • Linux: network: 环境:网络burst的一个原因,虚拟机感染病毒导致,外部网络设备太忙
  • 个人对Numpy中transpose()函数的理解
  • 利用Stable Diffusion技术,StableVision能够自动生成高质量、高分辨率的图像,满足用户对于图像素材的多样化需求。
  • 从模糊搜索到语义搜索的进化之路——探索 Chroma 在大模型中的应用价值
  • 层次与网络的视觉对话:树图与力引导布局的双剑合璧
  • pt-archive