1. 程式人生 > >Vue事件委託-跨域請求

Vue事件委託-跨域請求

Vue實現事件委託

今天有一個需求,在Vue中實現事件委託

程式碼如下

<template>
  <div class="hello">
    <div class="head">
      <img :src="Logo" alt="幼品彙" class="logo">
      <div class="search">搜尋框</div>
    </div>
    <div class="NavMain"  @click = "clicks">
      <div class
="index">首頁</div> <div class="eveir">環境創設</div> <div class="eveir1">裝備材料</div> <div class="eveir0">教育培訓</div> <div class="eveir2">股權加盟</div> <div class="eveir3">行業資訊</div> </div> </div> </template>

現在的需求是當點選不同的子分類,獲取到不同的類名,並進行相關的操作,經過查閱,使用target可以實現

js程式碼如下

export default {
  name: 'HelloWorld',
  data () {
    return {
      Logo:Logo,
    }
  },
  methods:{
    clicks(e){
      let e0 = e || window.event;
      var target = e0.target || e0.srcElement;
      console.log(target.className);
    }
  }
}
實現了功能但是需要對Vue中的target進行了解

target時間屬性可以返回事件的目標節點

Event物件代表事件的狀態比如事件在其中發生的元素,鍵盤按鍵的狀態,滑鼠的位置,滑鼠按鈕的狀態等

console.log(e.target)
會在瀏覽器輸出  <div  class="eveir3">行業資訊</div> 

e.currentTarget指的是註冊了事件監聽器的物件,換句話說也就是父元素,而e.target指的是該物件裡的子物件, 也就是真正觸發事件的子元素

Vue的跨域配置

背景:前端頁面的構建是基於vue-cli,所要請求的資料在後臺,請求的模式是fetch

假設大家對fetch vue相關知識有所瞭解,不做多贅述。

問題1:vue-cli的跨域的配置(proxyTable)

檔案位置:config/index.js

找到proxyTable,新增如下程式碼

//假設要請求的API放在http://xxxxxx.com/paeend/
proxyTable: {
      //重寫地址
      '/ajax': {
        target: 'http://xxxxxx.com/paeend/', //請求這個地址
        changeOrigin: true,//是否跨域
        pathRewrite: {
          '^/ajax': //地址重寫,將 /ajax替換成  ''
        }
      }
},

呼叫的時候在HelloWorld.vue中

<template>
  <div class="hello" @click='pox'>
    {{msg}}
  </div>
</template>
<style scoped></style>
<script>
export default {
    data(){
        return{
            msg:"HelloWorld"
        }
    },
    methods:{
        pox(){
         fetch("/ajax/me",{ //me代表方法名由於配置過跨域 /ajax/me 會被重寫成http://xxxxxx.com/paeend/me

           method:"post",  //請求型別
           headers:{   //設定頭資訊
             "content-type":"application/x-www-form-urlencoded"
           },
           data:{
             id:1002
           }
         }).then(function(e){  //將返回的資料轉化成json格式
           return e.json()
         }).then(function(e){
           console.log(e)
         })

        }
    }
}
</script>

問題2:由於同源策略的限制,伺服器端禁止訪問

錯誤資訊如下

POST http://xxxxxx.com/paeend/me (Internal Server Error)

Failed to load http://xxxxxx.com/paeend/me: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://127.0.0.1:8081' is therefore not allowed access. The response had HTTP status code 500.

該錯誤代表不被放行,同源策略禁止讀取位於htt p://xxxxxx.com/paeend / me的遠端資源

伺服器端解決方案 

在伺服器端的filter或者servlet裡面新增 response.setHeader(“Access-Control-Allow-Origin”, “*”)

代表允許所有來源進行跨域訪問,這裡也可以替換為特定的域名或ip

客戶端解決方案

這種方案是使用jsonp,預設使用get傳送請求,即使設定post也會被處理成get,涉及敏感資訊的話是十分不安全的,個人意見,慎用,兩種方案視情況而使用

$.ajax({
    url:'http://xxxxxx.com/paeend/me'
    dataType:"jsonp",
    success:function(e){
        console.log(e)
    }
})

Vue中發起請求的方式

vue-source

使用步驟
| npm install vue-source --save
| 在main.js中引入 import vueSource from “vue-source”
| 在使用一下 , Vue.use(VueSource)
| 在相對應的元件中
this.$http.post("http://xxxxxx.com/paeend/me",{product_id:1002}).then(res => {  
        console.log(res.body);
       },err => {
         console.log(err)
       })

axios

安裝

npm install axios --save

注意:安裝其他外掛可以在main.js中Vue.use(xxx),但是axios並不能use

​ 解決方案:修改原型鏈

具體做法

import axios from "axios";

Vue.prototype.$http = axios

使用

在對應的方法中
 this.$http({
        method: 'get',
        url: '/user',
        data: {
          name: 'virus'
        }
     })

設定hosts檔案,讓127.0.0.1對應localhost

hosts是系統檔案檔案位置:C:\Windows\System32\drivers\etc\hosts

在最後新增127.0.0.1 localhost

相關推薦

Vue事件委託-請求

Vue實現事件委託 今天有一個需求,在Vue中實現事件委託 程式碼如下 <template> <div class="hello"> <div class="head"> <img :s

vue 使用axios 請求數據的問題

rom 不想 需要 ole 人員 信息 vue 沒有 main axios默認是沒有jsonp 跨域請求的方法的。一般來說流行的做法是將跨域放在後臺來解決,也就是後臺開發人員添加跨域頭信息。 例如java中的 header,response.setHeader("Acce

$Django 問題(同源策略) vue專案(axios請求資料)

1 跨域問題 #同源策略 #本站的只能請求本站域名的資料 #CORS實現(跨域資源共享) #實現CORS通訊的關鍵是伺服器。只要伺服器實現了CORS介面,就可以跨源通訊。 #CORS基本流程 #1_CORS請求分成兩類:簡單請求(simple request)和非簡

vue解決POST請求

一.設定config/index.js || proxyTable新增proxyTable: {     '/api': {            target: 'http://192.168.48.239:8080/ydzl',            changeOrigin: true,       

vue proxyTable 介面請求問題處理

1、前言 在使用vue開發移動端app時,使用http請求獲取介面資料時,出現vue proxyTable介面跨域請求問題 2、vue http請求程式碼如下: this.$http.p

django與vue開發中請求問題

CSRF(Cross-site request forgery)跨站請求偽造,也被稱為“One Click Attack”或者Session Riding,通常縮寫為CSRF或者XSRF,是一種對網站的惡意利用。儘管聽起來像跨站指令碼(XSS),但它與XSS非常

vue proxyTable 接口請求調試(五)

cau tsp {} war 遠程服務 調試 設置代理 row web 在不同域之間訪問是比較常見,在本地調試訪問遠程服務器。。。。這就是有域問題。 VUE解決通過proxyTable: 在 config/index.js 配置文件中 dev: { env:

Vue中使用jsonp進行請求

集成 ret return axios 微信公眾 接口 erro jsonp export Vue-resouse中可以通過this.$http.jsonp的方式直接使用jsonp進行跨域請求。官方在推薦使用axios之後,axios並沒有集成jsonp。但在axios的g

Vue+axios+spring boot遇到的問題(請求)

port acc stringify all menu turn esp public token 一、點擊一次按鈕 會發送兩次請求的問題 第一個請求 Method是OPTIONS 第二個請求 Method是POST 後臺過濾器也是檢測出訪問了兩次,但

vue-cli項目本地代理實現請求

con 跨域 請求 AR url 本地 dex ams gin   使用 Vue-cli 創建的項目,開發地址是 localhost:8080,需要訪問非本機上的接口http://10.1.0.34:8000/queryRole。不同域名之間的訪問,需要跨域才能正確請求。跨

vue-cli(vue2.x)配置請求代理,設定請求

1、在config/index.js設定配置檔案,跨域配置代理 (預設裡面內容為空,我們需要加入對跨域介面的配置) 根據介面的不同設定的請求頭和主機也不同,自己按照格式要求進行配置即可。 如上圖配置好了之後,'/apis/getSongLyric'為自定義的axios請求路徑,自己根據相

vue 請求,後端cookie session取不到

雖然後端設定了可以跨域請求,但是後臺設定到cookie中的session取不到!這時候mac電腦自己設定ngaix代理! mac電腦系統重灌了,記錄一下安裝nginx的過程: 1、開啟終端(cmd) 2、安裝Command Line tools

Vue vue-resource 全域性攔截器 Post、Get、Jsonp請求、配置請求 全域性路徑配置

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src="../n

vue中設定,使用axios請求

在vue的時間開發過程中遇到比較頭疼的事情之一,就是在本地與非本地環境中的介面進行聯調。最常遇見的就是跨域問題,一把的解決方法有三種: 1. 後臺更改header(注:這是後臺的事,我們做不了) 2. 使用JQuery提供的jsonp  (注:只為了使用js

Vue前端服務代理實現請求資料。

開發中請求真實伺服器資料,配置伺服器代理實現跨域。 vue-cli + webpack 構建的專案 再 ./config/index.js 檔案中配置 proxyTable: { '/api':{ target: 'http://請求的伺服器地址',

vue.js工程建立和請求spring framework踩坑

問了同窗好友,做後臺都會前端vue的寫法了,想著自己也學一學。於是下載了webstorm進行開發。 1.webstorm建立工程 1.環境搭建 node 檢查node,npm環境 命令列輸入node -v以及npm -v能看到版本號下一步

Vue實現請求

實現跨域請求有兩種方式: 1、fetch (1)在App.vue中使用created方法建立fetch,將域名及方法等建立,如下圖 (2)在config配置檔案中的index.js中的跨域區域中寫入如下程式碼: (3)完善資訊,將介面相應的需求補充完整

vue 請求處理

前言:最近做了一個前後端自己獨立開發的專案,前端使用Vue,後端使用Django,研究了一下django rest api 的跨域處理和許可權管理 跨域的問題前端也可以解決後端也可以解決: 如vue框架解決跨域問題是使用代理: 再:config => index.js檔案下

vue-cli反向代理請求

最近一直在通過 webpack + Vue-CLI 來學習,想跨域呼叫介面資料。奈何因同源策略,瀏覽器限制,導致資源請求一直不成功。 現在整理一下思路 — — 跨域: 指瀏覽器受同源策略限制,不能夠訪問不同域的頁面(指令碼)。 同源策略限制已下行為: LocalStorage

vue+.netcore webapi前後端分離請求配置

1.安裝http庫-axios(axios 是一個基於 promise 的 HTTP 庫): npm install --save axios vue-axios // npm安裝 import Vue from 'vue' import axios from 'a