主頁(yè) > 知識(shí)庫(kù) > 詳解Ajax跨域(jsonp) 調(diào)用JAVA后臺(tái)

詳解Ajax跨域(jsonp) 調(diào)用JAVA后臺(tái)

熱門(mén)標(biāo)簽:中國(guó)地圖標(biāo)注不明確情況介紹表 怎樣在地圖標(biāo)注文字 地圖標(biāo)注推銷(xiāo)坑人 東平縣地圖標(biāo)注app 河間市地圖標(biāo)注app 大眾點(diǎn)評(píng)400電話(huà)怎么申請(qǐng) 上海企業(yè)外呼系統(tǒng)價(jià)錢(qián) 立陶宛地圖標(biāo)注 電銷(xiāo)機(jī)器人 長(zhǎng)春

1. JSONP定義

JSONP是英文JSON with Padding的縮寫(xiě),是一個(gè)非官方的協(xié)議。它允許在服務(wù)器端生成script tags返回至客戶(hù)端,通過(guò)javascript callback的形式來(lái)實(shí)現(xiàn)站點(diǎn)訪(fǎng)問(wèn)。 JSONP是一種script tag的注入,將server返回的response添加到頁(yè)面實(shí)現(xiàn)特定功能。

2.JSONP由來(lái)

要解釋JSONP的來(lái)由,先要說(shuō)一下瀏覽器的“同源策略(SOP:Same Origin Policy)”。 簡(jiǎn)而言之,就是瀏覽器限制腳本程序只能和同協(xié)議、同域名、同端口的腳本進(jìn)行交互,這包括共享和傳遞變量等。cookie的傳遞也是遵從同樣策略。這就造成一些涉及到多個(gè)服務(wù)器的應(yīng)用在整合時(shí)一些麻煩??缬蛟L(fǎng)問(wèn)的問(wèn)題造成A站點(diǎn)的Ajax代碼無(wú)法訪(fǎng)問(wèn)B站點(diǎn)的數(shù)據(jù)。

如何解決跨域訪(fǎng)問(wèn)呢?那就要借助瀏覽器的一個(gè)特性:盡管瀏覽器不允許頁(yè)面中的腳本程序跨域讀取數(shù)據(jù),但卻允許HTML引用跨域的資源,如圖片,CSS和腳本程序。對(duì)于腳本程序的引用比較特殊,它被瀏覽器解析以后,就和本地的腳本程序別無(wú)二致且可立即進(jìn)行解釋并執(zhí)行。如在B站點(diǎn)的一個(gè)js文件,一個(gè)簡(jiǎn)單的提示框:alert(“This is Victor!”);。在A(yíng)站點(diǎn)引用這個(gè)js,這個(gè)腳本就會(huì)在B站點(diǎn)的應(yīng)用中執(zhí)行,顯示一個(gè)alert信息。由于站外腳本的引用是通過(guò)script tag來(lái)實(shí)現(xiàn)的,而腳本程序又可通過(guò)DOM的方式可以對(duì)HTML頁(yè)面的所有標(biāo)簽進(jìn)行控制(包括動(dòng)態(tài)的創(chuàng)建script標(biāo)簽),這就可以實(shí)現(xiàn)通過(guò)調(diào)用站外程序?qū)Ρ镜刭Y源進(jìn)行更改了。另外,通過(guò)script> 標(biāo)記的使用,就可從服務(wù)端直接返回可執(zhí)行的JavaScript函數(shù)調(diào)用或者JSON數(shù)據(jù)。

3. JSONP原理與實(shí)現(xiàn)

首先在客戶(hù)端注冊(cè)一個(gè)callback, 然后把callback的名字傳給服務(wù)器。此時(shí),服務(wù)器先生成 JSON數(shù)據(jù)。然后以JavaScript 語(yǔ)法的方式,生成一個(gè)function, function名字就是傳遞上來(lái)的參數(shù)jsonp. 

然后,將JSON數(shù)據(jù)直接以入?yún)⒌姆绞?,放置到function中,這樣就生成了一段 js 語(yǔ)法的文檔,返回給客戶(hù)端。

最后,在客戶(hù)端瀏覽器中解析script標(biāo)簽,并執(zhí)行返回的JavaScript文檔,此時(shí)數(shù)據(jù)作為參數(shù),傳入到了客戶(hù)端預(yù)先定義好的回調(diào)函數(shù)里(動(dòng)態(tài)執(zhí)行回調(diào)函數(shù)) 。

具體代碼操作:

1,js代碼

$.ajax({

  url: 'http://192.168.3.49:8080/PORTAL/authCode',

  type: 'post',

  dataType:'jsonp',

  jsonp: "callback",

  data: {

    "type":'0',

    "mobilePhone": $("#tel").val()

  },

  success:function(data){

    alert(data.ret)

    settime(obj);

  },

  error:function(data){

    $('#mstr_ck').html("獲取驗(yàn)證碼失敗,請(qǐng)重試!");

    $("#error_ck").show();

  }

}); 

2,java代碼  

@RequestMapping(value = "authCode")

@ResponseBody

public String getMobileAuthCode( HttpServletRequest request, String callback)

    throws Exception {

  String result = "{'ret':'true'}";

  //加上返回參數(shù)

  result=callback+"("+result+")";

  return result;

} 

如上:前端調(diào)用結(jié)果彈出:alert('true')  

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • 詳解Java Ajax jsonp 跨域請(qǐng)求
  • 詳解java 中Spring jsonp 跨域請(qǐng)求的實(shí)例
  • java中實(shí)體類(lèi)和JSON對(duì)象之間相互轉(zhuǎn)化
  • json轉(zhuǎn)String與String轉(zhuǎn)json及判斷對(duì)象類(lèi)型示例代碼
  • 關(guān)于Java跨域Json字符轉(zhuǎn)類(lèi)對(duì)象的方法示例

標(biāo)簽:益陽(yáng) 四川 銅川 本溪 內(nèi)江 營(yíng)口 遼寧 玉樹(shù)

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《詳解Ajax跨域(jsonp) 調(diào)用JAVA后臺(tái)》,本文關(guān)鍵詞  詳解,Ajax,跨域,jsonp,調(diào)用,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《詳解Ajax跨域(jsonp) 調(diào)用JAVA后臺(tái)》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于詳解Ajax跨域(jsonp) 調(diào)用JAVA后臺(tái)的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章