亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 網站 > WEB開發 > 正文

jsonP相關知識點

2024-04-27 15:11:49
字體:
來源:轉載
供稿:網友

1、一個眾所周知的問題,Ajax直接請求普通文件存在跨域無權限訪問的問題,甭管你是靜態頁面、動態網頁、web服務、WCF,只要是跨域請求,一律不準;

2、不過我們又發現,Web頁面上調用js文件時則不受是否跨域的影響(不僅如此,我們還發現凡是擁有"src"這個屬性的標簽都擁有跨域的能力,比如<script>、<img>、<iframe>);

3、于是可以判斷,當前階段如果想通過純web端(ActiveX控件、服務端代理、屬于未來的HTML5之Websocket等方式不算)跨域訪問數據就只有一種可能,那就是在遠程服務器上設法把數據裝進js格式的文件里,供客戶端調用和進一步處理;

4、恰巧我們已經知道有一種叫做JSON的純字符數據格式可以簡潔的描述復雜數據,更妙的是JSON還被js原生支持,所以在客戶端幾乎可以隨心所欲的處理這種格式的數據;

5、這樣子解決方案就呼之欲出了,web客戶端通過與調用腳本一模一樣的方式,來調用跨域服務器上動態生成的js格式文件(一般以JSON為后綴),顯而易見,服務器之所以要動態生成JSON文件,目的就在于把客戶端需要的數據裝入進去。

6、客戶端在對JSON文件調用成功之后,也就獲得了自己所需的數據,剩下的就是按照自己需求進行處理和展現了,這種獲取遠程數據的方式看起來非常像AJAX,但其實并不一樣。

7、為了便于客戶端使用數據,逐漸形成了一種非正式傳輸協議,人們把它稱作JSONP,該協議的一個要點就是允許用戶傳遞一個callback參數給服務端,然后服務端返回數據時會將這個callback參數作為函數名來包裹住JSON數據,這樣客戶端就可以隨意定制自己的函數來自動處理返回數據了。

以上就是jsonp方法的思路,不得不佩服創造者是怎么個想出這種方法去跨域的。

Jsonp原理: 首先在客戶端注冊一個callback, 然后把callback的名字傳給服務器。此時,服務器先生成 json 數據。然后以 javascript 語法的方式,生成一個function , function 名字就是傳遞上來的參數 jsonp.最后將 json 數據直接以入參的方式,放置到 function 中,這樣就生成了一段 js 語法的文檔,返回給客戶端。客戶端瀏覽器,解析script標簽,并執行返回的 Javascript 文檔,此時數據作為參數,傳入到了客戶端預先定義好的 callback 函數里.(動態執行回調函數)

而目前實現jsonp跨域方法最簡便是使用jq封裝的

//首先要引入jquery的js包
02jQuery(document).ready(function(){
03    $.ajax({
04        type : "get", //jquey是不支持post方式跨域的
05        async:false,
06        url : "http://api.taobao.com/apitools/ajax_PRops.do", //跨域請求的URL
07        dataType : "jsonp",
08        //傳遞給請求處理程序,用以獲得jsonp回調函數名的參數名(默認為:callback)
09        jsonp: "jsoncallback",
10        //自定義的jsonp回調函數名稱,默認為jQuery自動生成的隨機函數名
11        jsonpCallback:"success_jsonpCallback",
12        //成功獲取跨域服務器上的json數據后,會動態執行這個callback函數
13        success : function(json){
14            alert(json);
15        }
16    });
17});

服務器端:

01public void jsonpTest()throws IOException{
02    HttpServletRequest request = ServletActionContext.getRequest();
03    HttpServletResponse response = ServletActionContext.getResponse();
04    //根據html指定的jsonp回調函數的參數名,獲取回調函數的名稱
05    //callbackName的值其實就是:success_jsonpCallback
06    String callbackName = (String)request.getAttribute("jsoncallback");
07    //簡單模擬一個json字符串,實際可使用google的gson進行轉換,次數通過字符串拼接
08    //{"name":"張三","age":28}
09    ///是對"號進行轉義
10    String jsonStr = "{/"name/":/"張三/",/"age/":28}";
11    //最終返回的數據為:success_jsonpCallback({"name":"張三","age":28})
12    String renderStr = callbackName+"("+jsonStr+")";
13    response.setContentType("text/plain;charset=UTF-8");
14    response.getWriter().write(renderStr);

原生方法的話有:

<meta content="text/html; charset=utf-8" http-equiv="Content-Type" />  <script type="text/javascript">      function jsonpCallback(result) {          //alert(result);          for(var i in result) {              alert(i+":"+result[i]);//循環輸出a:1,b:2,etc.          }      }      var JSONP=document.createElement("script");      JSONP.type="text/javascript";      JSONP.src="http://crossdomain.com/services.php?callback=jsonpCallback";      document.getElementsByTagName("head")[0].appendChild(JSONP);  </script>  PHP:<?php    //服務端返回JSON數據  $arr=array('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);  $result=json_encode($arr);  //echo $_GET['callback'].'("Hello,World!")';  //echo $_GET['callback']."($result)";  //動態執行回調函數  $callback=$_GET['callback'];  echo $callback."($result)";  

//首先要引入jquery的js包
02jQuery(document).ready(function(){
03    $.ajax({
04        type : "get",//jquey是不支持post方式跨域的
05        async:false,
06        url : "http://api.taobao.com/apitools/ajax_props.do", //跨域請求的URL
07        dataType : "jsonp",
08        //傳遞給請求處理程序,用以獲得jsonp回調函數名的參數名(默認為:callback)
09        jsonp:"jsoncallback",
10        //自定義的jsonp回調函數名稱,默認為jQuery自動生成的隨機函數名
11        jsonpCallback:"success_jsonpCallback",
12        //成功獲取跨域服務器上的json數據后,會動態執行這個callback函數
13        success : function(json){
14            alert(json);
15        }
16    });
17});

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品美女久久久久av超清| 日本视频久久久| 成人免费看黄网站| 91av免费观看91av精品在线| 欧美成人午夜激情在线| 成人性生交xxxxx网站| 一区二区中文字幕| 亚洲福利视频网站| 精品国内亚洲在观看18黄| 亚洲第一网站男人都懂| 亚洲国模精品私拍| 亚洲第一区在线| 国产日韩换脸av一区在线观看| 97色在线观看| 日本高清不卡在线| 一区三区二区视频| 性亚洲最疯狂xxxx高清| 国产日韩av在线| 精品无人区太爽高潮在线播放| 欧美丰满片xxx777| 欧美午夜久久久| 亚洲成年人在线| 国产一区二区三区毛片| 精品日本美女福利在线观看| 欧美午夜www高清视频| 久久免费福利视频| 欧美性猛交xxxxx水多| 日韩欧美大尺度| 欧美在线不卡区| 亚洲精品一区在线观看香蕉| 久久精品国产91精品亚洲| 日韩欧美成人免费视频| 日韩欧美国产视频| 久久久噜噜噜久久| 日韩av在线免费看| 国产精品丝袜一区二区三区| 欧美孕妇毛茸茸xxxx| 人人爽久久涩噜噜噜网站| 青青草精品毛片| 中文字幕日韩视频| 亚洲日本aⅴ片在线观看香蕉| 日韩专区中文字幕| 成人欧美在线视频| 欧洲美女7788成人免费视频| 精品在线欧美视频| 精品亚洲aⅴ在线观看| 欧美极品少妇xxxxⅹ免费视频| 97色在线视频| 国产v综合v亚洲欧美久久| 国产精品久在线观看| 国产香蕉精品视频一区二区三区| 狠狠躁夜夜躁人人躁婷婷91| 亚洲精品福利视频| 日韩精品在线视频观看| 色综合伊人色综合网| 日韩精品视频三区| 日韩电影免费观看在线| 麻豆国产va免费精品高清在线| 国产一区二区日韩精品欧美精品| 国内精品视频久久| 国产精品中文字幕在线观看| 亚洲一区二区自拍| 日韩中文av在线| 91人人爽人人爽人人精88v| 久久久久这里只有精品| 麻豆国产精品va在线观看不卡| 欧美日韩爱爱视频| 亚洲国产日韩欧美在线图片| 三级精品视频久久久久| 精品丝袜一区二区三区| 成人激情视频小说免费下载| 1769国内精品视频在线播放| 亚洲精品福利免费在线观看| 欧美性猛交xxxx富婆弯腰| 亚洲大胆美女视频| 日韩av成人在线观看| 国产成人精彩在线视频九色| 亚洲自拍偷拍色片视频| 2020国产精品视频| 欧美大片大片在线播放| 日韩大胆人体377p| 国产精品久久不能| 欧美精品福利在线| 久久天天躁狠狠躁夜夜躁| 欧美午夜片在线免费观看| 欧美日韩国产成人| 久久久久久久成人| 国产福利视频一区二区| 国产精品99久久久久久人| 久久亚洲私人国产精品va| 国产精品露脸av在线| 国产日本欧美一区二区三区| 国产精品18久久久久久麻辣| 国产在线视频2019最新视频| 欧美日韩美女在线观看| 亚洲影院色无极综合| 色婷婷综合成人av| 91av在线视频观看| 欧美一级视频免费在线观看| 18一19gay欧美视频网站| 国产精品第一第二| 国产精品羞羞答答| 亚洲免费人成在线视频观看| 国产欧美一区二区三区在线看| 国产成人精品免高潮在线观看| 国产噜噜噜噜久久久久久久久| 亚洲欧美中文另类| 国产精品久久久一区| 亚洲美女激情视频| 欧美在线国产精品| 精品国产欧美一区二区三区成人| 国产精品久久久久福利| 亚洲国产成人精品一区二区| 欧美亚洲在线播放| 青青草国产精品一区二区| 国产福利视频一区| 在线亚洲欧美视频| 成人免费福利在线| 欧美成人黑人xx视频免费观看| 欧美专区福利在线| 日本91av在线播放| 日本精品中文字幕| 91在线观看免费观看| 国产日韩在线播放| 亚洲欧美视频在线| 亚洲国产精品久久久| 亚洲成av人乱码色午夜| 欧美福利视频在线| 国产精品美女在线| 欧美综合在线第二页| 亚洲国产成人精品久久久国产成人一区| 亚洲一区二区久久久久久| 欧美成人中文字幕在线| 亚洲精品国产精品乱码不99按摩| 欧美一区二区三区免费视| 精品视频在线播放色网色视频| 亚洲一区中文字幕在线观看| 日本一本a高清免费不卡| 97色在线观看| 国产精品福利久久久| 欧美性xxxxx极品娇小| 亚洲精品一区二区三区不| 欧美黑人巨大xxx极品| 亚洲精品视频中文字幕| 欧美激情亚洲自拍| 韩国三级日本三级少妇99| 国产成人精品在线观看| 日韩在线小视频| 国产原创欧美精品| 国产精品欧美一区二区三区奶水| 韩国美女主播一区| 黄色精品在线看| 亚洲精品少妇网址| 日韩国产中文字幕| 宅男66日本亚洲欧美视频| 久久久久久久电影一区| 国产视频亚洲精品| 欧美黄色片在线观看| 91在线观看免费网站| 久久久久日韩精品久久久男男| 精品日本高清在线播放| 亚洲美女喷白浆| 国产一区欧美二区三区| 热久久99这里有精品|