程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> java 聯合jQuery完成跨域名獲得數據的辦法

java 聯合jQuery完成跨域名獲得數據的辦法

編輯:關於JAVA

java 聯合jQuery完成跨域名獲得數據的辦法。本站提示廣大學習愛好者:(java 聯合jQuery完成跨域名獲得數據的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是java 聯合jQuery完成跨域名獲得數據的辦法正文


1、甚麼是跨域?

因為閱讀器出於平安的斟酌,采用了同源戰略的限制,使得jQuery沒法直接跨域名相互操尴尬刁難象或數據。例如:a.com 域名下的

a.html頁面應用jQuery沒法操作b.com 域名下b.html頁面的對象或是數據, 而且默許情形下也不克不及操作test.a.com域名下的

test.html的 對象或是數據 。只需知足上面前提的jQuery都邑視為跨域名:

1.主域雷同,子域分歧,如xxx.aaa.com和yyy.aaa.com

2.域名雷同,端口分歧,如xxx.aaa.com:8000和xxx.aaa.com

3.域名雷同,協定分歧,如http://www.aaa.com/和https://www.aaa.com/

只要協定、域名、端口三者完整雷同jQuery才會視為不是跨域名的。

2、處理jQuery跨域名操尴尬刁難象的辦法

1、頂級域名一至的情形

默許情形下 a.com 域名下的 a.html頁面應用jQuery 不克不及操作test.a.com域名下的 test.html的對象或是數據。但關於這類頂級域名雷同的情形只需在a.html和test.html中重置document.domain=a.com即可。

2、頂級域名紛歧至的情形

關於 a.com 域名下的 a.html頁面應用jQuery操作b.com域名下的b.html頁面中的數據有兩辦法 $.getJSON 、$.ajax

(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.jb51.net/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字符串,現實可以使用谷歌的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.jb51.net/apitools/ajax_props.do&jsoncallback=?",

  function (data) {

    alert(data);

  }

);

履行道理:

發送要求時須要傳一個callback的回調函數名到辦事器端,辦事器端拿到這個回調函數名,再將前往數據用參數的情勢反回到客戶端,如許客戶端就可以夠調到。

所以發送要求URL的地址前面必定要上jsoncallback=?如許的參數,jquery會將?號主動調換成主動生成的回調函數的稱號。

所以終究的現實要求為:http://api.jb51.net/apitools/ajax_props.do&jsoncallback=jsonp1322444422697

所以和ajax的方法想比擬,也就是callback函數一個是主動生成的函數名,一個是手工指定的函數名。
留意以下幾點:

1.發送到數據吸收方的地址前面必定要加上callback=?如許的參數,且這個?是會被Jquery主動調換成回調辦法的稱號。(在Jquery1.4中可以本身指定回調辦法的稱號了)

2.留意js劇本發送數據的data不克不及寫成var data="{'username':'sanjer','userid':'110'}";而是要寫成var data={username:'sanjer',userid:'110'},這點要留意。要想吸收辦事器端前往的數據必需辦事器端封裝數據為JSON格局字符串並和callback值一道前往。(請細心看下面的示例代碼)。

3.因為挪用Jquery的$.getJSON辦法時,Jquery有本身的處置,現實上經由過程script的scr要求的,但要曉得,數據終究照樣經由過程url前面經由過程get方法發送數據出去的,這就決議了,發送的data數據量不克不及太多,不然形成url太長吸收掉敗(getJSON方法是弗成能有post方法遞交的)。

假如要跨域發送年夜數據量則選用jQuery供給的ajax辦法,最好不選用getJSON辦法。

4.以上的例子是站在兩方面的開辟都由你掌控的條件下的。且要留意辦事器法式真個平安系數不高(建議數據吸收端這邊不要放主要、敏感的邏輯處置單位)。

以上這篇java 聯合jQuery完成跨域名獲得數據的辦法就是小編分享給年夜家的全體內容了,願望能給年夜家一個參考,也願望年夜家多多支撐。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved