国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開通VIP
AngularJS實(shí)現(xiàn)跨域請(qǐng)求
跨域,前端開發(fā)中經(jīng)常遇到的問題,AngularJS實(shí)現(xiàn)跨域方式類似于Ajax,使用CORS機(jī)制。
下面闡述一下AngularJS中使用$http實(shí)現(xiàn)跨域請(qǐng)求數(shù)據(jù)。

AngularJS XMLHttpRequest:$http用于讀取遠(yuǎn)程服務(wù)器的數(shù)據(jù)
$http.post(url, data, [config]).success(function(){ ... });$http.get(url, [config]).success(function(){ ... });$http.get(url, [config]).success(function(){ ... });

一、$http.jsonp【實(shí)現(xiàn)跨域】

1. 指定callback和回調(diào)函數(shù)名,函數(shù)名為JSON_CALLBACK時(shí),會(huì)調(diào)用success回調(diào)函數(shù),JSON_CALLBACK必須全為大寫。
2. 指定其它回調(diào)函數(shù),但必須是定義在window下的全局函數(shù)。url中必須加上callback。

二、$http.get【實(shí)現(xiàn)跨域】

1. 在服務(wù)器端設(shè)置允許在其他域名下訪問
response.setHeader("Access-Control-Allow-Origin", "*"); //允許所有域名訪問response.setHeader("Access-Control-Allow-Origin", "http://www.123.com"); //允許www.123.com訪問
2. AngularJS端使用$http.get()

三、$http.post【實(shí)現(xiàn)跨域】

1. 在服務(wù)器端設(shè)置允許在其他域名下訪問,及響應(yīng)類型、響應(yīng)頭設(shè)置
response.setHeader("Access-Control-Allow-Origin", "*");response.setHeader("Access-Control-Allow-Methods","POST");response.setHeader("Access-Control-Allow-Headers","x-requested-with,content-type");
2. AngularJS端使用$http.post(),同時(shí)設(shè)置請(qǐng)求頭信息
$http.post('http://localhost/ajax/getAllIndustryCategoty.pt',{languageColumn:'name_eu'},{'Content-Type':'application/x-www-form-urlencoded'}).success(function(data){		$scope.industries = data;	});

四、實(shí)現(xiàn)方式

跨域方式一【JSONP】:

方法一:
$http.jsonp("http://localhost/sitesettings/getBadgeInfo.pt?jsonp=JSON_CALLBACK&siteid=137bd406").success(function(data){ ... });//  The name of the callback should be the string JSON_CALLBACK.
方法二【返回值,需要使用對(duì)應(yīng)callback方法接收,但如何置于$scope???】:
$http.jsonp("http://localhost/sitesettings/getBadgeInfo.pt?jsonp=badgeabc&siteid=137bd406");function badgeabc(data){ ... }

public String execute() throws Exception {		String result = FAIL;	response.setHeader("", "");	SiteHandlerAction siteHandlerAction = (SiteHandlerAction)BeansFactory.getBean(SiteHandlerAction.class);	BadgeHandlerAction badgeHandlerAction = (BadgeHandlerAction)BeansFactory.getBean(BadgeHandlerAction.class);	if("".equals(siteid) || siteid == null || StringUtils.isBlank("jsonp")){		result = FAIL;	}else{		Site site = siteHandlerAction.find(siteid);		UserBadgeStatus userBadgeStatus = badgeHandlerAction.getUserBadgeStatus(site.getId());		if(userBadgeStatus != null){			result = "{\"t\":"+userBadgeStatus.getStyle()+",\"l\":"+userBadgeStatus.getSuspend_location()+",\"s\":"+site.getId()+"}";			JSONObject jsonObj = JSONObject.fromObject(result);			String json = jsonObj.toString();			result = jsonp + "(" + json + ")";		}	}	PrintWriter write = response.getWriter();	write.print(result);	write.flush();	write.close();	return NONE;}

跨域方式二【$http.get()】:

function getAdustryController($scope,$http){	$http.get('http://localhost/ajax/getAllIndustryCategoty.pt?languageColumn=name_eu').success(function(data){		$scope.industries = data;	});}

跨域方式三【$http.post()】:

function getAdustryController($scope,$http){	$http.post('http://localhost/ajax/getAllIndustryCategoty.pt',{languageColumn:'name_eu'},{'Content-Type':'application/x-www-form-urlencoded'}).success(function(data){		$scope.industries = data;	});}

// java端支持跨域請(qǐng)求public String execute(){	response.setHeader("Access-Control-Allow-Origin", "*"); //允許哪些url可以跨域請(qǐng)求到本域	response.setHeader("Access-Control-Allow-Methods","POST"); //允許的請(qǐng)求方法,一般是GET,POST,PUT,DELETE,OPTIONS	response.setHeader("Access-Control-Allow-Headers","x-requested-with,content-type"); //允許哪些請(qǐng)求頭可以跨域		SiteHandlerAction SiteHandler = (SiteHandlerAction) BeansFactory.getBean(SiteHandlerAction.class);	List list = SiteHandler.getAllIndustryCategory(); //所有的分類集合	JSONArray jsonArray = JSONArray.fromObject(list); //將list轉(zhuǎn)為json	String json = jsonArray.toString(); //轉(zhuǎn)為json字符串	try {		PrintWriter write = response.getWriter();		write.print(json);		write.close();	} catch (IOException e) {		e.printStackTrace();	}	return NONE;}

 

{{ industry.id }}{{ industry.name_ch }}{{ industry.name_eu }}{{ industry.name_jp }}

轉(zhuǎn)載自:http://www.bkjia.com/Javascript/977935.html

大家會(huì)自然想到只有一個(gè)字母之差的JSON吧~

JSON(JavaScript Object Notation)和JSONP(JSON with Padding)雖然只有一個(gè)字母的差別,但其實(shí)他們根本不是一回事兒

JSON是一種數(shù)據(jù)交換格式,而JSONP是一種依靠開發(fā)人員的聰明才智創(chuàng)造出的一種非官方跨域數(shù)據(jù)交互協(xié)議。我們拿最近比較火的諜戰(zhàn)片來打個(gè)比方,JSON是地下黨們用來書寫和交換情報(bào)的“暗號(hào)”,而JSONP則是把用暗號(hào)書寫的情報(bào)傳遞給自己同志時(shí)使用的接頭方式??吹?jīng)]?一個(gè)是描述信息的格式,一個(gè)是信息傳遞雙方約定的方法。

 

瀏覽器是存在同源策略這個(gè)機(jī)制的,在全局層面禁止了頁面加載或執(zhí)行與自身來源不同的域的任何腳本。

JSONP是一種可以繞過瀏覽器的安全限制,從不同的域請(qǐng)求數(shù)據(jù)的方法。

 

Web頁面上調(diào)用js文件時(shí)則不受是否跨域的影響(不僅如此,我們還發(fā)現(xiàn)凡是擁有”src”這個(gè)屬性的標(biāo)簽都擁有跨域的能力,比如<script>、<img>、<iframe>);

如果想通過純web端(ActiveX控件、服務(wù)端代理、屬于未來的HTML5之Websocket等方式不算)跨域訪問數(shù)據(jù)就只有一種可能,那就是在遠(yuǎn)程服務(wù)器上設(shè)法把數(shù)據(jù)裝進(jìn)js格式的文件里,供客戶端調(diào)用和進(jìn)一步處理;JSON的純字符數(shù)據(jù)格式可以簡(jiǎn)潔的描述復(fù)雜數(shù)據(jù),被js原生支持,所以在web客戶端通過與調(diào)用腳本一模一樣的方式,來調(diào)用跨域服務(wù)器上動(dòng)態(tài)生成的js格式文件(一般以JSON為后綴),顯而易見,服務(wù)器之所以要?jiǎng)討B(tài)生成JSON文件,目的就在于把客戶端需要的數(shù)據(jù)裝入進(jìn)去。為了便于客戶端使用數(shù)據(jù),逐漸形成了一種非正式傳輸協(xié)議,人們把它稱作JSONP,該協(xié)議的一個(gè)要點(diǎn)就是允許用戶傳遞一個(gè)callback參數(shù)給服務(wù)端,然后服務(wù)端返回?cái)?shù)據(jù)時(shí)會(huì)將這個(gè)callback參數(shù)作為函數(shù)名來包裹住JSON數(shù)據(jù),這樣客戶端就可以隨意定制自己的函數(shù)來自動(dòng)處理返回?cái)?shù)據(jù)了。

 

JSONP的原理是通過<script>標(biāo)簽發(fā)起一個(gè)GET請(qǐng)求來取代XHR請(qǐng)求。JSONP生成一個(gè)<script>標(biāo)簽并插到DOM中,然后瀏覽器會(huì)接管并向src屬性所指向的地址發(fā)送請(qǐng)求。

當(dāng)服務(wù)器返回請(qǐng)求時(shí),響應(yīng)結(jié)果會(huì)被包裝成一個(gè)JavaScript函數(shù),并由該請(qǐng)求所對(duì)應(yīng)的回調(diào)函數(shù)調(diào)用。

AngularJS在$http服務(wù)中提供了一個(gè)JSONP輔助函數(shù)。通過$http服務(wù)的jsonp方法可以發(fā)送請(qǐng)求,如下所示:

     $http .jsonp("https://api.github.com?callback=JSON_CALLBACK") .success(function(data) { 

  // 數(shù)據(jù)
});

當(dāng)請(qǐng)求被發(fā)送時(shí),AngularJS會(huì)在DOM中生成一個(gè)如下所示的<script>標(biāo)簽:

  <script src="https://api.github.com?callback=angular.callbacks._0" type="text/javascript"></script> 

注意,JSON_CALLBACK被替換成了一個(gè)特地為此請(qǐng)求生成的自定義函數(shù)。當(dāng)支持JSOPN的服務(wù)器返回?cái)?shù)據(jù)時(shí),數(shù)據(jù)會(huì)被包裝在由AngularJS生成的具名函數(shù)angular.callbacks._0中在這個(gè)例子中,GitHub服務(wù)器會(huì)返回包含在回調(diào)函數(shù)中的JSON數(shù)據(jù),響應(yīng)看起來如下所示: 

 // 簡(jiǎn)寫  

  angular.callbacks._0({ 

    ‘meta‘: { 
      ‘X-RateLimit-Limit‘: ‘60‘, 
      ‘status‘: 200 
    }, 
    ‘data‘: { 
      ‘current_user_url‘: ‘https://api.github.com/user‘ 
    } 
  }) 
當(dāng)AngularJS調(diào)用指定的回調(diào)函數(shù)時(shí)會(huì)對(duì)$http的promise對(duì)象進(jìn)行resolve。當(dāng)我們自己開發(fā)支持JSONP的后端服務(wù)時(shí),要確保響應(yīng)的數(shù)據(jù)被包含在請(qǐng)求所指定的回調(diào)函數(shù)中。使用JSONP需要意識(shí)到潛在的安全風(fēng)險(xiǎn)。首先,服務(wù)器會(huì)完全開放,允許后端服務(wù)調(diào)用應(yīng)用中的任何JavaScript。不受我們控制的外部站點(diǎn)(或者蓄意攻擊者)可以隨時(shí)更改腳本,使我們的整個(gè)站點(diǎn)變得脆弱。服務(wù)器或中間人有可能會(huì)將額外的JavaScript邏輯返回給頁面,從而將用戶的隱私數(shù)據(jù)暴露出來。由于請(qǐng)求是由<script>標(biāo)簽發(fā)送的,所以只能通過JSONP發(fā)送GET請(qǐng)求。并且腳本的異常也很難處理。使用JSONP一定要謹(jǐn)慎,同時(shí)只跟信任并可以控制的服務(wù)器進(jìn)行通信。

 

一句話就是利用script標(biāo)簽繞過同源策略,獲得一個(gè)類似這樣的數(shù)據(jù),jsonpcallback是頁面存在的回調(diào)方法,參數(shù)就是想得到的json。

 

 

Jquery中jsonp的使用

 

myUrl = "http://localhost:8090/api/test";$.ajax({  type:"GET",  url:myUrl,  dataType:"jsonp",  jsonp:"callback",  jsonpCallback:"jsonpCallback",  success:function(data){    alert(data.msg);
  }});function jsonpCallback(data){  alert(data);}
1.jsonp只能使用get請(qǐng)求,解決同源問題,返回javascript代碼,因?yàn)檎?qǐng)求javascript文件是沒有同源問題的。
2.當(dāng)請(qǐng)求數(shù)據(jù)類型為jsonp時(shí),會(huì)將callback=jsonpCallback加在url上,http://localhost:8090/api/testcallback=jsonpCallback
3.前臺(tái)javascript中定義jsonpCallback函數(shù),此函數(shù)必須定義在window下,也就是全局的函數(shù),否則找不到。
4.后臺(tái)獲取請(qǐng)求的callback參數(shù)值jsonpCallback,返回字符串"jsonpCallback(result)",result為返回結(jié)果。
5.請(qǐng)求返回的是script tag,首先會(huì)調(diào)用jsonpCallback函數(shù),不管是否找到該函數(shù),都會(huì)調(diào)用success函數(shù)。
6.如果沒有定義jsonp和jsonpCallback,jsonp默認(rèn)為"callback",jsonpCallback會(huì)是Jquery自動(dòng)生成的函數(shù)名。

 

angularJS中jsonp的使用

myUrl = "http://localhost:8090/api/testcallback=JSON_CALLBACK";$http.jsonp(myUrl).success(
  function(data){    alert(data);  });1.angularJS中使用$http.jsonp函數(shù)2.指定callback和回調(diào)函數(shù)名,函數(shù)名為JSON_CALLBACK時(shí),會(huì)調(diào)用success回調(diào)函數(shù),JSON_CALLBACK必須全為大寫。3.也可以指定其它回調(diào)函數(shù),但必須是定義在window下的全局函數(shù)。4.url中必須加上callback5.當(dāng)callback為JSON_CALLBACK時(shí),只會(huì)調(diào)用success,即使window中有JSON_CALLBACK函數(shù),也不會(huì)調(diào)用該函數(shù)。


轉(zhuǎn)載自:http://www.bubuko.com/infodetail-748374.html

本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
angularjs跨域post解決方案
Jsonp 方式跨域獲取 json 數(shù)據(jù)原理 - JavaScript - web - JavaEye論壇
java web跨域請(qǐng)求
jsonp詳解
AJAX 跨域請(qǐng)求
jquery請(qǐng)求格式和返回類型 匯總
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服