axios请求使用方法 并解决跨域问题

举报
IT 叶新东老师 发表于 2021/12/31 22:48:12 2021/12/31
【摘要】 最近在研究axios 的异步请求,用法和ajax差不多,但是官方说明比ajsx要好     get 请求使用方法 var url = "请求链接";var param= {"参数":"参数的值"};// axios 参数必须用params包裹,例如: var param = {params:{pageNo:...

最近在研究axios 的异步请求,用法和ajax差不多,但是官方说明比ajsx要好

 

  get 请求使用方法


  
  1. var url = "请求链接";
  2. var param= {"参数":"参数的值"};
  3. // axios 参数必须用params包裹,例如: var param = {params:{pageNo:1,pageSize:20}}
  4. param = {params:param};
  5. axios.get(
  6. url,
  7. param
  8. ).then(function (data) {
  9. callBackFunc(data.data);
  10. }).catch(function (e) {
  11. console.log("url:"+url +",请求失败,网络错误");
  12. });

post请求使用方法


  
  1. var url = "请求链接";
  2. var formDate = {"参数":"参数的值"};
  3. axios.post(
  4. url,
  5. formDate
  6. ).then(function (data) {
  7. alert("请求成功");
  8. }).catch(function (e) {
  9. console.log("url:"+url +",请求失败,网络错误");
  10. });

使用方法就这么简单,

################## 解决跨域问题 ##############################################

先看看报错信息,跨域问题一直让人很头疼

解决方案是在后端服务器响应时添加响应头(这里用 java 示例)在过滤器中为每个请求添加响应头 Access-Control-Allow-Origin 以解决跨域问题


  
  1. package com.icode.common.web.config.filter;
  2. import com.icode.common.command.UserSessionCommand;
  3. import com.icode.common.constant.CommonContant;
  4. import com.icode.common.web.service.WebCacheService;
  5. import com.xd.core.common.error.ErrorMsg;
  6. import com.xd.core.common.utils.JsonParser;
  7. import com.xd.core.common.utils.StringUtils;
  8. import com.xd.core.common.utils.WebUtils;
  9. import org.springframework.context.ApplicationContext;
  10. import org.springframework.web.context.support.WebApplicationContextUtils;
  11. import javax.servlet.*;
  12. import javax.servlet.http.HttpServletRequest;
  13. import javax.servlet.http.HttpServletResponse;
  14. import java.io.IOException;
  15. /**
  16. * <过滤器>
  17. **/
  18. @javax.servlet.annotation.WebFilter(urlPatterns = "/*", filterName = "myfilter")
  19. public class WebFilter implements Filter {
  20. @Override
  21. public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
  22. HttpServletRequest request = (HttpServletRequest) servletRequest;
  23. HttpServletResponse response = (HttpServletResponse) servletResponse;
  24. //为所有请求添加响应头,以解决ajax跨域问题
  25. response.setHeader("Access-Control-Allow-Origin", "*");
  26. //设置编码
  27. response.setCharacterEncoding("UTF-8");
  28. request.setCharacterEncoding("UTF-8");
  29. filterChain.doFilter(request, response);
  30. }
  31. }

关键代码


  
  1. //为所有请求添加响应头,以解决ajax跨域问题
  2. response.setHeader("Access-Control-Allow-Origin", "*");

然后前端 axios 的 post 请求封装成 FormData 对象 即可解决跨域问题


  
  1. //使用formdata方式传参
  2. var formDate = new FormData();
  3. formDate.append("loginName","123");
  4. formDate.append("password","123");
  5. axios.post(
  6. url,
  7. formDate,
  8. config
  9. ).then(function (data) {
  10. callBackFunc(data.data);
  11. }).catch(function (e) {
  12. console.log("url:"+url +",请求失败,网络错误");
  13. });

在瞄一眼controller的代码


  
  1. /**
  2. *
  3. * <注册>
  4. *
  5. */
  6. @PostMapping("user/register")
  7. public ResponseCommand register( UserRequestCommand command){
  8. System.out.println(command.getLoginName());
  9. System.out.println(command.getPassword());
  10. }

测试一下,写个html 使用axios 发个异步请求过去,看下图,后台已经接受到参数了

 

总结:

    网上跨域请求的解决方案都很乱,而且大部分的解决方案都是没有用的,

    且有些方案讲的很抽象,让新手不容易理解,这篇文章,没有废话,直接告诉你解决方案,简单粗暴

文章来源: yexindong.blog.csdn.net,作者:java叶新东老师,版权归原作者所有,如需转载,请联系作者。

原文链接:yexindong.blog.csdn.net/article/details/85129687

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。