广告
返回顶部
首页 > 资讯 > 精选 >Vue动态加载图片在跨域时无法显示如何解决
  • 901
分享到

Vue动态加载图片在跨域时无法显示如何解决

2023-07-04 15:07:27 901人浏览 薄情痞子
摘要

这篇“Vue动态加载图片在跨域时无法显示如何解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Vue动态加载图片在跨域时无法

这篇“Vue动态加载图片在跨域时无法显示如何解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Vue动态加载图片在跨域时无法显示如何解决”文章吧。

写在前面

问题:VUE开发时因为要访问后端的接口所以要配置请求转发,如果直接转发全部请求,那么VUE动态绑定的src也会转发到后端,因为图片在前端,所以会收到404 NOT FOUND的报错。

常规的请求转发

在vue-cli3内,直接编辑vue.config.js,如下:

let proxyObj={};proxyObj['/']={  ws:false,  target:'Http://localhost:8023',//后端地址  changeOrigin:true,  pathRewrite:{    '^/':''  }};module.exports={  devServer:{    host:'localhost',    port:8080,    proxy:proxyObj  }};

代码很简单,就不解释了,这段代码就是把所有请求都转发到了后端。

常规的src动态绑定

如下:

// position.duiduorob为data内定义的字段<img :src="require(`@/assets/image/dianhan${position.duiduorob}.png`)" >

值得注意的是,需要用require(``)这样的方法,如果直接填写图片地址如:

<img :src="'../../assets/image/dianhan'+position.duiduorob+'.png'">

浏览器内会找不到该图片。原因:通常在编译运行后,图片会被webpack统一打包到localhost:8080/static/img/[文件名].png,因为是上述过程动态加载的,所以url-loader无法解析图片地址,所以导致上述方法中的图片无法在浏览器内显示。解决方法就是通过require(``)这样的方法将图片作为模块被加载。

跨域请求转发时找不到图片

前面也说了,就是因为转发了全部请求,所以上述require(``)过后,浏览器去后端找图片了,导致找不到。
解决思路:只转发要访问后端接口的请求,其它不变。
所以其实就是过滤一下,添加一个条件。如下:要访问后端的请求在url上加一个/api即可

let proxyObj={};proxyObj['/api']={ //url前部加上'/api'  ws:false,  target:'http://localhost:8023',//后端地址  changeOrigin:true,  pathRewrite:{    '^/api':'' //到了后端去掉/api  }};module.exports={  devServer:{    host:'localhost',    port:8080,    proxy:proxyObj  }};

所以在其他部分全部不变的情况下,只需在你封装的http请求方法内给url参数前加一个'/api'前缀,如下:

export const getRequst=(url,params)=>{  return axiOS({    method:'get',    url:'/api'+ url,//原来为 url:url,    data:params,  })};

这下访问后端的请求全部在url上套上了'/api',而其它请求也不会被转发到后端了。

知识点补充:vue中解决跨域问题

方法1.后台更改header

header('Access-Control-Allow-Origin:*');//允许所有来源访问 header('Access-Control-Allow-Method:POST,GET');//允许访问的方式   

方法2.使用JQuery提供的jsonp

methods: {  getData () {   var self = this   $.ajax({    url: 'http://f.apiplus.cn/bj11x5.JSON',    type: 'GET',    dataType: 'JSONP',    success: function (res) {     self.data = res.data.slice(0, 3)     self.opencode = res.data[0].opencode.split(',')    }   })  } }

方法3.使用http-proxy-middleware 代理解决(项目使用vue-cli脚手架搭建)

例如请求的url:“http://f.apiplus.cn/bj11x5.json”

1、打开config/index.js,在proxyTable中添写如下代码:

proxyTable: {  '/api': { //使用"/api"来代替"http://f.apiplus.c"   target: 'http://f.apiplus.cn', //源地址   changeOrigin: true, //改变源   pathRewrite: {    '^/api': 'http://f.apiplus.cn' //路径重写    }  } }

2、使用axios请求数据时直接使用“/api”:

getData () {  axios.get('/api/bj11x5.json', function (res) {   console.log(res)  })

通过这中方法去解决跨域,打包部署时还按这种方法会出问题。解决方法如下:

let serverUrl = '/api/' //本地调试时 // let serverUrl = 'http://f.apiplus.cn/' //打包部署上线时 export default {  dataUrl: serverUrl + 'bj11x5.json' }

附:

方法二引入jq

1.下载依赖

cnpm install Jquery --save-dev

2.在WEBpack.base.conf.js文件中加入

plugins: [  new webpack.ProvidePlugin({    $: "jquery",    jQuery: "jquery"  }) ],

3.在需要的temple里引入也可以在main.js里全局引入

import $ from 'jquery'

eg:

<template> <div class="source">   source{{data}} </div></template><script>import $ from 'jquery' export default({  name:"source",  data(){   return{    data:""   }  },  created(){   this.getData()  },  methods:{   getData () {    var self = this    $.ajax({     url: '你要请求的url',     type: 'GET',     dataType: 'JSONP',     success: function (res) {      self.data = res.result     }    })   }  } })</script><style></style>

Vue的优点

Vue具体轻量级框架、简单易学、双向数据绑定、组件化、数据和结构的分离、虚拟DOM、运行速度快等优势,Vue中页面使用的是局部刷新,不用每次跳转页面都要请求所有数据和dom,可以大大提升访问速度和用户体验。

以上就是关于“Vue动态加载图片在跨域时无法显示如何解决”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注编程网精选频道。

--结束END--

本文标题: Vue动态加载图片在跨域时无法显示如何解决

本文链接: https://www.lsjlt.com/news/346070.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Vue动态加载图片在跨域时无法显示如何解决
    这篇“Vue动态加载图片在跨域时无法显示如何解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Vue动态加载图片在跨域时无法...
    99+
    2023-07-04
  • vue后台返回base64图片无法显示如何解决
    本篇内容主要讲解“vue后台返回base64图片无法显示如何解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue后台返回base64图片无法显示如何解决”吧!vue后台返回base64图片无...
    99+
    2023-07-02
  • 如何解决springMVC跳转js、css图片等静态资源无法加载的问题
    这篇文章将为大家详细讲解有关如何解决springMVC跳转js、css图片等静态资源无法加载的问题,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。web.xml中servlet> <s...
    99+
    2023-05-31
    springmvc js css
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作