当前位置:   article > 正文

Vue3 Axios网络请求简单应用_vue3 网络请求

vue3 网络请求

cd 到项目 安装Axioscnpm install --save axios

post传递参数 需要安装querystring 用于转换参数格式cnpm install --save querystring

运行示例:

后台接口: GetTestData.java

  1. package com.csdnts.api;
  2. import java.io.IOException;
  3. import java.io.PrintWriter;
  4. import java.util.ArrayList;
  5. import java.util.List;
  6. import javax.servlet.ServletException;
  7. import javax.servlet.annotation.WebServlet;
  8. import javax.servlet.http.HttpServlet;
  9. import javax.servlet.http.HttpServletRequest;
  10. import javax.servlet.http.HttpServletResponse;
  11. import com.csdnts.dto.User;
  12. import com.google.gson.Gson;
  13. /**
  14. * Servlet implementation class GetTest
  15. */
  16. @WebServlet("/getTestData.jspx")
  17. public class GetTestData extends HttpServlet {
  18. private static final long serialVersionUID = 1L;
  19. /**
  20. * @see HttpServlet#HttpServlet()
  21. */
  22. public GetTestData() {
  23. super();
  24. // TODO Auto-generated constructor stub
  25. }
  26. /**
  27. * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
  28. */
  29. protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  30. // TODO doGet() 后台解决跨越问题
  31. //数据
  32. List<User> users = new ArrayList<>();
  33. User user = new User();
  34. user.setName("张三丰");
  35. user.setAge(25);
  36. user.setSex("男");
  37. User user2 = new User();
  38. user2.setName("周芷若");
  39. user2.setAge(22);
  40. user2.setSex("女");
  41. users.add(user);
  42. users.add(user2);
  43. Gson gson = new Gson();
  44. //[{"name":"张三丰","sex":"男","age":25},{"name":"周芷若","sex":"女","age":22}]
  45. String userString = gson.toJson(users);
  46. /**设置响应头 解决跨越问题
  47. * 这样,你的Servlet将允许来自任何域名的跨域请求,并且能够正常返回数据。
  48. * 请注意,CORS是一种安全机制,它在浏览器中执行。因此,即使你在后台配置了CORS头信息,
  49. * 浏览器仍然会根据这些头信息来判断是否允许跨域请求。
  50. * 如果浏览器不支持CORS或者请求中包含不允许的头信息,仍然会被浏览器拦截。
  51. * 你可以根据需要修改Access-Control-Allow-Origin头信息的值来指定允许访问的域名,
  52. * 如果你希望允许来自任何域名的访问,可以将其设置为"*"。
  53. * */
  54. response.setHeader("Access-Control-Allow-Origin", "*");
  55. response.setHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");
  56. response.setHeader("Access-Control-Allow-Headers", "Content-Type");
  57. response.setHeader("Access-Control-Max-Age", "3600");
  58. //输出到页面
  59. response.setContentType("text/html");
  60. response.setCharacterEncoding("UTF-8");
  61. PrintWriter out = response.getWriter();
  62. out.print(userString);
  63. out.flush();
  64. }
  65. /**
  66. * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
  67. */
  68. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  69. // TODO doPost 后台没有解决跨越问题
  70. //数据
  71. List<User> users = new ArrayList<>();
  72. User user = new User();
  73. user.setName("张三");
  74. user.setAge(25);
  75. user.setSex("男");
  76. User user2 = new User();
  77. user2.setName("李四");
  78. user2.setAge(22);
  79. user2.setSex("女");
  80. users.add(user);
  81. users.add(user2);
  82. Gson gson = new Gson();
  83. //[{"name":"张三","sex":"男","age":25},{"name":"李四","sex":"女","age":22}]
  84. String userString = gson.toJson(users);
  85. //输出到页面
  86. response.setContentType("text/html");
  87. response.setCharacterEncoding("UTF-8");
  88. PrintWriter out = response.getWriter();
  89. out.print(userString);
  90. out.flush();
  91. }
  92. }

后台接口: Login.java

  1. package com.csdnts.api;
  2. import java.io.IOException;
  3. import java.io.PrintWriter;
  4. import javax.servlet.ServletException;
  5. import javax.servlet.annotation.WebServlet;
  6. import javax.servlet.http.HttpServlet;
  7. import javax.servlet.http.HttpServletRequest;
  8. import javax.servlet.http.HttpServletResponse;
  9. /**
  10. * Servlet implementation class Login
  11. */
  12. @WebServlet("/login.jspx")
  13. public class Login extends HttpServlet {
  14. private static final long serialVersionUID = 1L;
  15. /**
  16. * @see HttpServlet#HttpServlet()
  17. */
  18. public Login() {
  19. super();
  20. // TODO Auto-generated constructor stub
  21. }
  22. /**
  23. * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
  24. */
  25. protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  26. // TODO 参数传递 在后台没有解决跨越问题,在前台处理了
  27. //获取参数
  28. String userName = request.getParameter("userName");
  29. String passWord = request.getParameter("passWord");
  30. System.out.println("userName:"+userName);
  31. System.out.println("passWord:"+passWord);
  32. if(userName != null && !"".equals(userName) && passWord != null && !"".equals(passWord)){
  33. //有数据
  34. if(userName.equals("admin") && passWord.equals("123456")){
  35. //用户名密码正确
  36. //输出到页面
  37. outPrint(response,"恭喜"+userName+"登录成功");
  38. }else{
  39. //用户名密码正确错误
  40. outPrint(response,"用户名或密码错误");
  41. }
  42. }else{
  43. //空
  44. outPrint(response,"用户名或密码为空");
  45. }
  46. }
  47. private void outPrint(HttpServletResponse response, String msg) throws IOException {
  48. // TODO 把结果输出到页面
  49. response.setContentType("text/html");
  50. response.setCharacterEncoding("UTF-8");
  51. PrintWriter out = response.getWriter();
  52. out.print(msg);
  53. out.flush();
  54. }
  55. }

前台代码: HelloWorld.vue

  1. <template>
  2. <div class="hello">
  3. <h2>Vue Axios网络请求</h2>
  4. <h3>从网络上获取到的数据get:{{ getmsg }}</h3>
  5. <h3>从网络上获取到的数据post:{{ postmsg }}</h3>
  6. <h3>登录状态:{{ loginMsg }}</h3>
  7. </div>
  8. </template>
  9. <script>
  10. import axios from "axios"
  11. import querystring from "querystring"
  12. export default {
  13. name: 'HelloWorld',
  14. data(){
  15. return{
  16. getmsg:"",
  17. postmsg:"",
  18. loginMsg:""
  19. }
  20. },
  21. // 组件生命周期方法 组件渲染完成执行此方法
  22. mounted(){
  23. axios({
  24. //get 请求
  25. method:"get",
  26. // http://www.csdnts.com 你的域名 这个是假的
  27. url: "http://www.csdnts.com/getTestData.jspx" //get
  28. // 成功
  29. }).then(res =>{
  30. console.log(res);
  31. console.log(res.data);
  32. this.getmsg = res.data;
  33. // 失败
  34. }).catch(err =>{
  35. console.log(err);
  36. this.getmsg =err;
  37. })
  38. axios({
  39. // post请求 由于post请求后台没有解决跨越问题 会发生报错。AxiosError: Network Error
  40. // 也可以在前台 解决跨越问题 打开vue.config.js 文件 设置proxy 重启服务再次运行就可以了
  41. method:"post",
  42. url: "/getTestData.jspx" //post
  43. // 成功
  44. }).then(res =>{
  45. console.log(res);
  46. console.log(res.data);
  47. this.postmsg = res.data;
  48. // 失败
  49. }).catch(err =>{
  50. console.log(err);
  51. this.postmsg =err;
  52. })
  53. //post 传递参数 需要安装 queryString 转换参数格式 cnpm install --save querystring
  54. axios({
  55. // 请求 post
  56. method:"post",
  57. //http://www.csdnts.com/login.jspx?userName=admin&passWord=123456
  58. url: "/login.jspx",
  59. //.stringify
  60. data:querystring.stringify({
  61. userName:"admin",
  62. passWord:"123456"
  63. })
  64. // 成功
  65. }).then(res =>{
  66. console.log(res);
  67. console.log(res.data);
  68. this.loginMsg = res.data;
  69. // 失败
  70. }).catch(err =>{
  71. console.log(err);
  72. this.loginMsg =err;
  73. })
  74. /**
  75. //简写get
  76. axios.get("http://www.csdnts.com/getTestData.jspx")
  77. .then(res =>{
  78. console.log(res.data);
  79. this.getmsg = res.data;
  80. }).catch(err =>{
  81. console.log(err);
  82. this.getmsg =err;
  83. })
  84. //简写post
  85. axios.post("/login.jspx",querystring.stringify({
  86. userName:"admin",
  87. passWord:"123456"
  88. }))
  89. .then(res =>{
  90. console.log(res.data);
  91. this.loginMsg = res.data;
  92. }).catch(err =>{
  93. console.log(err);
  94. this.loginMsg =err;
  95. })
  96. */
  97. }
  98. }
  99. </script>
  100. <!-- Add "scoped" attribute to limit CSS to this component only -->
  101. <style scoped>
  102. h3 {
  103. margin: 40px 0 0;
  104. }
  105. ul {
  106. list-style-type: none;
  107. padding: 0;
  108. }
  109. li {
  110. display: inline-block;
  111. margin: 0 10px;
  112. }
  113. a {
  114. color: #42b983;
  115. }
  116. </style>

文件:vue.config.js 

vue.config.js 

  1. const { defineConfig } = require('@vue/cli-service')
  2. module.exports = defineConfig({
  3. transpileDependencies: true,
  4. devServer:{
  5. proxy:{
  6. '/api':{
  7. target:'http://www.csdnts.com', //你的域名 演示用这个是假的
  8. changeOrigin:true
  9. }
  10. }
  11. }
  12. })

扩展 :全局引用Axios

main.js

  1. import { createApp } from 'vue'
  2. import App from './App.vue'
  3. import './registerServiceWorker'
  4. //引入axios
  5. import axios from 'axios'
  6. // 把Axios 挂载到全局 起的名字 $axios,引用 this.$axios.get() this.$axios.post()
  7. const app = createApp(App)
  8. app.config.globalProperties.$axios = axios
  9. app.mount('#app')

使用

  1. //引用全局的简写get
  2. this.$axios.get("http://www.csdnts.com/getTestData.jspx")
  3. .then(res =>{
  4. console.log(res.data);
  5. this.getmsg = res.data;
  6. }).catch(err =>{
  7. console.log(err);
  8. this.getmsg =err;
  9. })
  10. //引用全局的简写post
  11. this.$axios.post("/api/login.jspx",querystring.stringify({
  12. userName:"admin",
  13. passWord:"123456"
  14. }))
  15. .then(res =>{
  16. console.log(res.data);
  17. this.loginMsg = res.data;
  18. }).catch(err =>{
  19. console.log(err);
  20. this.loginMsg =err;
  21. })

没有设置跨域报错:

has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/257220
推荐阅读
相关标签
  

闽ICP备14008679号