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

首頁 > 編程 > JavaScript > 正文

jquery的ajax和getJson跨域獲取json數據的實現方法

2019-11-20 21:10:14
字體:
來源:轉載
供稿:網友

很多開發人員在使用jquery在前端和服務器端進行數據交互,所以很容易會認為在前端利用jquery就可以讀取任何站點的數據了。近日在進行開 發時,因為要和第三方公司的一個項目進行數據的共享,因為考慮多不占用服務器的資源,遂決定直接在html進行數據的讀取,不走服務器端進行中轉了。然后 正好就遇到了瀏覽器端跨域訪問的問題。

跨域的安全限制都是指瀏覽器端來說的,服務器端不存在跨域安全限制的問題。

目前瀏覽器端跨域訪問常用的兩種方法有兩種:

1、通過jQuery的ajax進行跨域,這其實是采用的jsonp的方式來實現的。

jsonp是英文json with padding的縮寫。它允許在服務器端生成script tags至返回至客戶端,也就是動態生成javascript標簽,通過javascript callback的形式實現數據讀取。

html頁面端示例代碼:

復制代碼 代碼如下:

 //首先要引入jquery的js包
 jQuery(document).ready(function(){
     $.ajax({

         type : "get", //jquey是不支持post方式跨域的

         async:false,

         url : "http://api.taobao.com/apitools/ajax_props.do", //跨域請求的URL

         dataType : "jsonp",

         //傳遞給請求處理程序,用以獲得jsonp回調函數名的參數名(默認為:callback)

         jsonp: "jsoncallback",

         //自定義的jsonp回調函數名稱,默認為jQuery自動生成的隨機函數名

         jsonpCallback:"success_jsonpCallback",

         //成功獲取跨域服務器上的json數據后,會動態執行這個callback函數

         success : function(json){ 

             alert(json);
         }
     });
 });


服務器端示例代碼,以java為例:

服務器端代碼,是重點,開始以為,只要客戶端通過jsonp就可以直接跨域訪問,其實不然,需要服務器端的支持才行。

復制代碼 代碼如下:

 public void jsonpTest() throws IOException{

     HttpServletRequest request = ServletActionContext.getRequest();

     HttpServletResponse response = ServletActionContext.getResponse();

     //根據html指定的jsonp回調函數的參數名,獲取回調函數的名稱

     //callbackName的值其實就是:success_jsonpCallback

     String callbackName = (String)request.getAttribute("jsoncallback");

     //簡單模擬一個json字符串,實際可使用google的gson進行轉換,次數通過字符串拼接

     //{"name":"張三","age":28}

     ///是對"號進行轉義

     String jsonStr = "{/"name/":/"張三/",/"age/":28}";

     //最終返回的數據為:success_jsonpCallback({"name":"張三","age":28})

     String renderStr = callbackName+"("+jsonStr+")";

     response.setContentType("text/plain;charset=UTF-8");

     response.getWriter().write(renderStr);
 }


jsonp的原理:

首先在客戶端注冊一個callback (如:'jsoncallback'), 然后把callback的名字(如:success_jsonpCallback)傳給服務器端對應的處理函數。

服務器先生成需要返回給客戶端的 json 數據。然后以 javascript 語法的方式,生成一個function , function 名字就是傳遞上來的參數(jsoncallback)的值(success_jsonpCallback) 。

最后將 json 數據直接以入參的方式,放置到 function 中,這樣就生成了一段 js 語法的文檔,返回給客戶端。
客戶端瀏覽器,解析script標簽,并將服務器端返回的數據,作為參數,
傳入到了客戶端預先定義好的 callback 函數(如上例中jquery $.ajax()方法封裝的的success: function (json))里。

實際上跨域是通過動態增加script來加載數據,無法直接獲得數據,所以需要使用回調函數。

2.使用jquery的getJson進行跨域讀取數據

實際上getJson方式的根本原理和ajax使用jsonp的方式是一樣的。

jquery中常用getJson來調用獲取遠程的數據,并通過json格式返回。函數的原型如下:

jQuery.getJSON(url,data,success(data,status,xhr))

參數描述
url必需。規定將請求發送的哪個 URL。
data可選。規定連同請求發送到服務器的數據。
success(data,status,xhr)

可選。規定當請求成功時運行的函數。

額外的參數:

  • response - 包含來自請求的結果數據
  • status - 包含請求的狀態
  • xhr - 包含 XMLHttpRequest 對象

該函數是簡寫的ajax函數,實際上等價于:

復制代碼 代碼如下:

$.ajax({
  url: url,
  data: data,
  success: callback,
  dataType: json
});

言歸正傳,下面我們來看如何使用getJson跨域獲取數據。

html頁面示例代碼:

復制代碼 代碼如下:

$.getJSON("http://api.taobao.com/apitools/ajax_props.do&jsoncallback=?",
    function (data) {
        alert(data);
    }
);

執行原理:

發送請求時需要傳一個callback的回調函數名到服務器端,服務器端拿到這個回調函數名,再將返回數據用參數的形式反回到客戶端,這樣客戶端就能夠調到。

所以發送請求URL的地址后面一定要上jsoncallback=?這樣的參數,jquery會將?號自動替換成自動生成的回調函數的名稱。

所以最終的實際請求為:http://api.taobao.com/apitools/ajax_props.do&jsoncallback=jsonp1322444422697

所以和ajax的方式想比較,也就是callback函數一個是自動生成的函數名,一個是手工指定的函數名。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲成avwww人| 日韩综合中文字幕| 国产激情999| 久久精品福利视频| 欧美视频不卡中文| 不用播放器成人网| 97**国产露脸精品国产| 日韩国产高清视频在线| 欧美肥老太性生活视频| 免费91麻豆精品国产自产在线观看| 亚洲视频999| 成人在线小视频| 午夜精品免费视频| 韩国19禁主播vip福利视频| 伊人男人综合视频网| 一个人www欧美| 欧美一级电影久久| 91a在线视频| 日韩中文综合网| 久久国产精品久久久久久久久久| 国产91色在线|| 美女福利视频一区| 欧美在线观看网址综合| 日本精品视频在线| 亚洲国产日韩欧美在线动漫| 26uuu亚洲伊人春色| 成人黄色在线免费| 国产亚洲精品高潮| 亚洲人成绝费网站色www| 欧美噜噜久久久xxx| 久久99久国产精品黄毛片入口| 日韩免费av一区二区| 久久精品成人动漫| 在线亚洲男人天堂| 成人免费视频网| 欧美日韩免费观看中文| 精品国产依人香蕉在线精品| 成人日韩av在线| 久久夜精品va视频免费观看| 国产精品pans私拍| 久久综合伊人77777尤物| 国产精品黄色影片导航在线观看| 久久五月天综合| 欧洲成人在线观看| 国产精品第一区| 国产成人综合一区二区三区| 国产精品视频免费观看www| 亚洲偷熟乱区亚洲香蕉av| 国产成人精品午夜| 色综合久久中文字幕综合网小说| 亚洲永久免费观看| 久久久久久久91| 欧美综合第一页| 91香蕉嫩草影院入口| 亚洲欧美中文日韩在线| 欧美视频一区二区三区…| 欧美怡春院一区二区三区| 国产丝袜一区二区三区免费视频| 欧美老女人性视频| 国产成人黄色av| 亚洲图片欧美午夜| 国产亚洲精品va在线观看| 亚洲丝袜一区在线| 懂色av影视一区二区三区| 91精品国产成人| 狠狠做深爱婷婷久久综合一区| 伊人久久久久久久久久久| 97久久精品在线| 国内精品一区二区三区四区| 久久免费国产视频| 成人免费淫片aa视频免费| 在线激情影院一区| 亚洲国产高潮在线观看| 欧美性猛交xxxxx免费看| 日韩精品在线观看一区二区| 国产一区二区色| 精品呦交小u女在线| 亚洲国产欧美一区二区丝袜黑人| 成人午夜两性视频| 国产精品入口免费视| 97精品国产97久久久久久免费| 日本久久亚洲电影| xvideos亚洲人网站| 亚洲国产日韩精品在线| 欧美xxxx18性欧美| 成人免费网视频| 亚洲国产成人久久| 久久色免费在线视频| 搡老女人一区二区三区视频tv| 欧美一级片免费在线| 一区二区三区四区精品| 久久成人这里只有精品| 日韩在线观看免费高清| 欧美日韩国产精品一区二区三区四区| 亚洲老板91色精品久久| 欧美亚洲另类在线| 日韩欧美国产高清91| 免费91在线视频| 亚洲高清在线观看| 久久人人爽国产| 高清亚洲成在人网站天堂| 国产精品老牛影院在线观看| 色老头一区二区三区在线观看| 自拍亚洲一区欧美另类| 国产精品1234| 成人在线精品视频| 国产亚洲精品美女久久久| 亚洲一区二区三区乱码aⅴ| 亚洲成人a级网| 亚洲一级免费视频| 亚洲www视频| 欧美华人在线视频| 国产精品美女av| 日韩av一区在线| 中文字幕自拍vr一区二区三区| 国产精品久久久久久久久久三级| 亚洲高清一二三区| 在线观看日韩专区| 亚洲男人第一av网站| 亚洲第一国产精品| 欧美性猛交xxxx黑人| 久久久久久久影院| 欧美激情第1页| 蜜臀久久99精品久久久无需会员| 美乳少妇欧美精品| 欧美大片网站在线观看| 日韩动漫免费观看电视剧高清| 蜜臀久久99精品久久久无需会员| 国产精品伦子伦免费视频| 日韩亚洲欧美中文在线| 欧美日韩国产中文字幕| 久久久久久欧美| 欧美亚洲视频在线观看| 日韩成人av网址| 日韩国产欧美精品一区二区三区| 亚洲一区美女视频在线观看免费| 91超碰中文字幕久久精品| 久久99热精品这里久久精品| 国产精品久久久久久搜索| 亚洲人午夜精品免费| 亚洲欧美日韩在线高清直播| 日韩av色在线| 久久成人av网站| 国产精品电影一区| 精品久久久久久久久久久久| 5278欧美一区二区三区| 日韩精品在线免费观看视频| 久久免费视频网| 国产精品欧美风情| 亚洲tv在线观看| 热久久视久久精品18亚洲精品| 欧美另类精品xxxx孕妇| 久久99久久久久久久噜噜| 久久久91精品国产一区不卡| 欧美成人免费在线观看| 欧美激情一级欧美精品| 久久色在线播放| 神马久久久久久| 欧美日韩爱爱视频| 久久久国产精品免费| 亚洲桃花岛网站| 久久国产精品免费视频| 欧美精品在线免费| 91精品视频免费看|