1. 程式人生 > >java後臺+vue前端,解決jsonp跨域問題(有資料返回的,但是Response的body或者data為空)

java後臺+vue前端,解決jsonp跨域問題(有資料返回的,但是Response的body或者data為空)

 前端Vue採用jsonp方法訪問後臺資料

前端請求程式碼:

getAllList() {
	//匯入Vue-resource.js,通過this.$http發起資料請求
	//this.$http.get('url').then(function(result){})
	//通過then指定回撥函式,可獲取伺服器返回的資料
	//判斷result.status是否等於200,200為請求成功。
	//若是0,則將result.body賦值給this.list。若不是則提示獲取資料失敗
				
this.$http.jsonp('http://localhost:8080/VueServer/server')
    .then(function(result) {
        console.log(result)//便於檢視資料返回情況
	    if(result.status === 200) {
			this.list = result.body
		} else {
			alert('獲取資料失敗')
		}
     })
}

後臺servlet主要程式碼:


protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    resp.setHeader("content-type", "text/html;charset=UTF-8");
    PrintWriter out;
    out=resp.getWriter();
    out.write("[{id:1, name:'賓士'},{id:2, name:'寶馬'}]");
}

 在控制檯Network檢視,該請求是有資料返回的,但是Response的body或者data為空,狀態碼status為0

原因是jsonp在傳送請求的時候在URL後面自動添加了 一個callback引數,而而我們沒有把這個引數返回導致Response無資料

解決方法:

在後臺獲取callback的值並將其與返回資料拼接後一起放回

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    resp.setHeader("content-type", "text/html;charset=UTF-8");
    PrintWriter out;
    out=resp.getWriter();
    //獲取callback值與需要返回的資料拼接,一併返回給前端。注意需要返回的資料需要用小括號“()”包裹起來
    out.write(req.getParameter("callback") + "([{id:1, name:'賓士'},{id:2, name:'寶馬'}])");
    }

 這樣前端就可以準確獲取資料了,如圖

 

相關推薦

java後臺+vue前端解決jsonp問題(資料返回但是Response的body或者data)

 前端Vue採用jsonp方法訪問後臺資料 前端請求程式碼: getAllList() { //匯入Vue-resource.js,通過this.$http發起資料請求 //this.$http.get('url').then(function(result){})

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

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

服務端讀取圖片內容返回前端解決圖片問題

最近在配合前端開發,開發一個圖片裁剪功能的時候,遇到一個oss圖片跨域請求,無法訪問的問題,索性自己寫個介面,先讀取圖片檔案流再直接返回前端。具體程式碼如下。 1.新建檔案流內容封裝類FileContent 1 public class FileContent { 2 private b

企業微信JS-SDK引用(java後臺,vue前端)

近期需要隱藏企業轉發等功能,需要呼叫企業微信JS-SDK,把自己寫的留存下. 步驟一:引入JS檔案 步驟二:通過config介面注入許可權驗證配置 注:所有需要使用JS-SDK的頁面必須先注入配置資訊,否則將無法呼叫(同一個url僅需呼叫一次,對於變化url的SPA

vue中使用jsonp訪問資料

1.首先在src目錄下建立一個api目錄,下面建立cofing.js和recommend.js檔案,在config.js檔案中是一些跨域訪問的引數:export const commonParams = { source: 'wap' //訪問時的公共引數 } exp

Vue前端配置代理實現請求

跨域的解決方法:         *設定讓伺服器允許跨域         *前端配置代理實現跨域請求 本文介紹前端配置代理實現跨域請求:  在專案config資料

vue-resource中的jsonp請求

jsonp的用法   jsonp請求主要是用來解決ajax跨域請求問題,使用jsonp實現跨域首先要保證伺服器api支援jsonp請求的格式。   寫法格式: this.$http.jsonp('ur

【練習】angularjs(最基本的$http使用jsonp使用jsonp獲取天氣(採用百度地圖天氣api)路由功能實現單頁面不跳轉切換)

1.最基本的$http使用jsonp跨域 <body ng-app="app"> <div ng-controller="controller"> </div> <script src="angularjs/angularjs.js

SpringBoot2.0高階案例(10):整合 JWT 框架解決Token驗證問題

GitHub原始碼地址:知了一笑 https://github.com/cicadasmile/middle-ware-paren

關於vue-cliaxsios的使用和訪問資料的總結

一、安裝axsois   1.安裝:在vue-cli根目錄下安裝axsois    2.更改原型鏈方法:在main.js下更改:   3.在元件中使用: 二、跨域   1.在config/index.js 新增如下程式碼: proxyTable: { './api':{ targ

Vue中如何使用axios訪問資料

最近在專案中需要用到axios,所以就惡補一下這個axios到底是什麼東東。越來它是vue-resource的替代品,官網也說了,以後都用axios, vue-resource不在維護。那麼這個axios怎麼用呢,上網搜尋了一大堆,基本上都是雷同,我也不知道那些作者有沒有在

JSONP讀取資料

json是一種資料傳輸格式,而jsonp是一種資料獲取的方式,沒有什麼相關性。jsonp是一種輕量級的資料傳輸方式,為什麼要使用jsonp呢?為什麼我們從不同的域(網站)訪問資料需要一個特殊的技術(JSONP )呢?這是因為同源策略。同源策略,它是由Netscape提出的一個

解決ajax獲取資料的問題

不講原理  只是說說解決的方法吧 1:在servlet中的dopost()方法中宣告一句話: 加一個頭宣告    //  response.setContentType("text/json; charset=utf-8");response.setHeader("Acc

JSONP訪問資料傳輸

JSON(JavaScript Object Notation)和JSONP(JSON with Padding)雖然只有一個字母的差別,但其實他們根本不是一回事兒 JSON是一種資料交換格式,而JSONP是一種依靠開發人員的聰明才智創造出的一種非官方跨域資料

Spring Boot支援JSONP請求資料(Ajax的jsonp)

1:在Spring Boot的Api伺服器上進行配置 package me.loveshare.note1.configuration; import org.springframework.web.

AngularJs---JSONP訪問資料傳輸

Jquery中jsonp的使用   myUrl = "http://localhost:8090/api/test"; $.ajax({   type:"GET",   url:myUrl,   dataType:"jsonp",   jsonp:"callback",  

請求 資料返回卻無法執行回撥函式的原因之一

由於公司專案的問題,導致跨域的情況比較多。既要考慮安全性問題又要解決跨域。只能從中做一些取捨。 今天發現的問題是,前端已經獲取了後臺返回的CALLBACK函式,但是無論如何都不執行。這可把我急的,之前也寫過一次跨域請求。現在呼叫同樣寫好的函式,卻是一個能執行一

解決ajax的辦法代理corsjsonp

resource 通過 使用 -o 參考 acc log 方式 sha 1、使用php做代理去請求第三方api接口 php是可以跨域的,我們利用ajax請求本域名中的php文件,php再去請求第三方接口文件,從而達到跨域目的。 php做代理請求: aj

java後臺介面SSM框架解決問題

這幾天和前端對接介面,前端的錯誤資訊是:    註釋:  Failed to load http://192.168.3.3:8080/Light_Push/webFrames.action?page=1&searchProject=1&page=1

jQuery和java後臺jsonp問題

Jsonp原理:   ajax本身是不可以跨域的,通過產生一個script標籤來實現跨域。因為script標籤的src屬性是沒有跨域的限制的。其實設定了dataType: ‘jsonp’後,$.ajax方法就和ajax XmlHttpRequest沒什麼關係了