jsonp 方式處理跨域前后端代碼如何配合?


JSONP(JSON with Padding)(json   數據填充只支持GET請求

是JSON的一種“使用模式”,可用於解決主流瀏覽器的跨域數據訪問的問題。

跨域產生原因是瀏覽器的同源策略。(為了安全)

不同源:

1.協議不同:http  和 https

2.主域不同   www.domain001.com   和  www.domain002.com

3.端口號不同  http://localhost:8088  和 http://localhost:9000。

 

JSONP原理是:不同源的網站可以相互調用 <script src=“http://www.oop.im/data.php?callback=jQuery33107585929035461674_1530774352156&_=1530774352157”></script>

src 屬性里加載的資源不受同源策略影響,具有跨域能力。

前端代碼:

$(function(){
	$.ajax({
		url:'http://www.oop.im/data.php',
		type:'GET',
		dataType:'jsonp',
		jsonp:'callback',
		success:function(res){
			console.log(res);
		}
	});
})

  注意點:1.dataType:"jsonp"  dataType 屬性必須設置正確 "jsonp"。

      2.jsonp:屬性需要設置與后台約定的參數,如果不設置默認也為callback。設置為其他的參數如   jsonWrap 時,Request URL  鏈接將會變成: http://www.oop.im/data.php?jsonWrap =jQuery3310687844059098403_1530775709409&_=153077570

上圖藍色的 callback 即是 jsonp:"callback",設置的,這個關鍵詞也可以跟后台約定成其他的字符串(如 showJson)。

紅色字符串是jquery 隨機生成的字符串,后台將數據作為參數包裹在這個隨機字符串函數里作為參數傳遞到前台。

 

后台代碼:

$data = json_encode(array('msg'=>'跨域測試','status'=>true));
echo $_GET['callback'].'('.$data.')';

  

后台PHP 通過 $_GET("callback") 全局函數獲取到  紅線框里的隨機字符串,並將這個字符串作為 包裹數據的函數名,返回給前台。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM