欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JSONP跨域請求

 更新時(shí)間:2017年03月02日 14:13:18   作者:小禾點(diǎn)點(diǎn)  
本文主要介紹了jsonp跨域請求的相關(guān)知識。具有很好的參考價(jià)值,下面跟著小編一起來看下吧

什么是跨域:

1、域名不同

2、域名相同端口不同

js出于對安全考慮不支持跨域請求。我們可以使用JSONP解決跨域問題。

一、JSONP是什么

JSONP(JSON with Padding)是JSON的一種“使用模式”,可用于解決主流瀏覽器的跨域數(shù)據(jù)訪問的問題。由于同源策略,一般來說位于 server1.example.com 的網(wǎng)頁js是無法與不是 server1.example.com的服務(wù)器溝通,而 HTML 的<script> 元素是一個(gè)例外。利用 <script> 元素的這個(gè)開放策略,網(wǎng)頁可以得到從其他來源動態(tài)產(chǎn)生的 JSON 資料,而這種使用模式就是所謂的 JSONP。用 JSONP 抓到的資料并不是 JSON,而是任意的JavaScript,用 JavaScript 直譯器執(zhí)行而不是用 JSON 解析器解析。

原理:瀏覽器在js請求中,是允許通過script標(biāo)簽的src跨域請求,可以在請求的結(jié)果中添加回調(diào)方法名,在請求頁面中定義方法,既可獲取到跨域請求的數(shù)據(jù)。(js請求的不是一個(gè)單純的json數(shù)據(jù)而是一段包含json數(shù)據(jù)的js腳本)

二、模擬JSONP

服務(wù)器域名:http://localhost:8081/rest/itemcat/list

客戶端服務(wù)器:http://localhost:8082/test.html

1、普通的JS跨域請求

服務(wù)器數(shù)據(jù):

客戶端請求代碼:

$(function(){
  $.ajax(    {url: "http://localhost:8081/rest/itemcat/list?callback=myFunction", 
     success: function(data){
      console.info(data)
   }}); 
 });

結(jié)果

XMLHttpRequest cannot load http://localhost:8081/rest/itemcat/list?callback=myFunction. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8082' is therefore not allowed access.

2、模擬JSONP請求

客戶端請求代碼:

$(function(){
  greateScript("http://localhost:8081/rest/itemcat/list");
  function greateScript(src) {
   $("<script><//script>").attr("src", src).appendTo("body")
  } 
 });

結(jié)果:

list?_=1488425374097:1 Uncaught SyntaxError: Unexpected token :

三、使用JSONP

環(huán)境:

服務(wù)器域名:http://localhost:8081/rest/itemcat/list

客戶端服務(wù)器:http://localhost:8082/test.html

服務(wù)端代碼(本人使用springmvc4):

@RequestMapping("/itemcat/list")
 @ResponseBody
 public Object getItemCatList(String callback) {
  CatResult catResult = itemCatService.getItemCatList();
  MappingJacksonValue mappingJacksonValue = new MappingJacksonValue(catResult);
  //設(shè)置JSONP回調(diào)函數(shù)
  mappingJacksonValue.setJsonpFunction(callback);
  return mappingJacksonValue;
 }

客戶端調(diào)用代碼:

$(function(){
  $.ajax(
   { url: "http://localhost:8081/rest/itemcat/list", 
    dataType: "jsonp",
    jsonp: "callback",
    success: function(data){
    console.info(data)
   }}); 
 });

結(jié)果:

看返回結(jié)果可以發(fā)現(xiàn)返回的數(shù)據(jù)不是一段單純的json數(shù)據(jù),而是一段js函數(shù)。

以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時(shí)也希望多多支持腳本之家!

相關(guān)文章

  • JS代碼優(yōu)化技巧之通俗版(減少js體積)

    JS代碼優(yōu)化技巧之通俗版(減少js體積)

    如果你問我網(wǎng)站中最影響網(wǎng)站打開速度的是什么?我會告訴是網(wǎng)站中的javascript,簡稱JS。模板中引用的JS文件越多,打開速度越慢,這點(diǎn)我深有體會,不信你看看盧松松博客首頁,使勁優(yōu)化后依然有100K的文件
    2011-12-12
  • javascript自定義滾動條實(shí)現(xiàn)代碼

    javascript自定義滾動條實(shí)現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了javascript自定義滾動條實(shí)現(xiàn)代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-02-02
  • 分析ES5和ES6的apply區(qū)別

    分析ES5和ES6的apply區(qū)別

    這篇文章主要介紹了分析ES5和ES6的apply區(qū)別,對ES6感興趣的同學(xué),可以參考下
    2021-05-05
  • ??一文帶你了解JavaScript多文件混淆加密

    ??一文帶你了解JavaScript多文件混淆加密

    JavaScript?代碼多文件混淆加密可以有效保護(hù)源代碼不被他人輕易盜取,這篇文章主要為大家介紹了JavaScript中混淆加密的實(shí)現(xiàn),需要的小伙伴可以參考下
    2023-11-11
  • 對TypeScript庫進(jìn)行單元測試的方法

    對TypeScript庫進(jìn)行單元測試的方法

    這篇文章主要介紹了對TypeScript庫進(jìn)行單元測試的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-07-07
  • js的onload事件及初始化按鈕事件示例代碼

    js的onload事件及初始化按鈕事件示例代碼

    onload事件當(dāng)一個(gè)頁面或是一張圖片加載完成時(shí)被觸發(fā),在body上不僅可以用onload,而且還支持多個(gè)HTML標(biāo)簽.用法如下
    2013-09-09
  • JS中new?Blob()詳解及blob轉(zhuǎn)file示例

    JS中new?Blob()詳解及blob轉(zhuǎn)file示例

    這篇文章主要給大家介紹了關(guān)于JS中new?Blob()詳解及blob轉(zhuǎn)file的相關(guān)資料,Blob?Blob(Binary?Large?Object)表示二進(jìn)制類型的大對象,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-11-11
  • 基于pako.js實(shí)現(xiàn)gzip的壓縮和解壓功能示例

    基于pako.js實(shí)現(xiàn)gzip的壓縮和解壓功能示例

    這篇文章主要介紹了基于pako.js實(shí)現(xiàn)gzip的壓縮和解壓功能,結(jié)合具體實(shí)例形式分析了pako.js實(shí)現(xiàn)字符串壓縮與解壓縮的相關(guān)操作技巧,需要的朋友可以參考下
    2017-06-06
  • JavaScript中的對象和原型(一)

    JavaScript中的對象和原型(一)

    大家都知道在js中沒有類的概念,因此它的對象也與基于類的語言中的對象有所不同。所以大家要了解面向?qū)ο螅紫纫私鈐s中的對象和原型,下面本文給大家介紹JavaScript中的對象和原型(一)知識,一起看下吧
    2016-08-08
  • JavaScript中的變量提升和函數(shù)提升

    JavaScript中的變量提升和函數(shù)提升

    這篇文章主要介紹了JavaScript中的變量提升和函數(shù)提升,在js中對變量進(jìn)行操作后打印值經(jīng)常會出現(xiàn)undefined的現(xiàn)象。其實(shí)原因是因?yàn)閖s中有一個(gè)叫做變量提升的功能
    2022-07-07

最新評論