最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Spring 4.1+JSONP的使用指南

 更新時間:2016年04月26日 08:45:57   作者:風(fēng)間影月  
在解釋JSONP之前,我們需要了解下”同源策略“,這對理解跨域有幫助?;诎踩脑?瀏覽器是存在同源策略機制的,同源策略阻止從一個源加載的文檔或腳本獲取或設(shè)置另一個源加載額文檔的屬性。說的簡單點就是瀏覽器限制腳本只能和同協(xié)議、同域名、同端口的腳本進行交互。

JSONP就是為了解決這一問題的,JSONP是英文JSON with Padding的縮寫,是一個非官方的協(xié)議。他允許服務(wù)端生成script tags返回值客戶端,通過javascript callback的形式來實現(xiàn)站點訪問。JSONP是一種script tag的注入,將server返回的response添加到頁面是實現(xiàn)特定功能。

簡而言之,JSONP本身不是復(fù)雜的東西,就是通過scirpt標簽對javascript文檔的動態(tài)解析繞過了瀏覽器的同源策略。

如今的巨石應(yīng)用已經(jīng)越來越不行了,很多互聯(lián)網(wǎng)在后期都會在用分布式的架構(gòu)

那么在頁面上不同的服務(wù)調(diào)用不同域名下的json是有問題的

(跨域:不同域名,相同域名但是不同端口)

JavaScript規(guī)范中提到的json是不能直接跨域調(diào)用,為了安全,但是能調(diào)用js片段

所以把json包裝為一個js片段,也就是jsonp那么就能夠跨域請求

在spring4.1后,提供了新的方法可以作為jsonp的調(diào)用

例:

@RequestMapping(value="/list")
  @ResponseBody
  public Object getItemCatList(String callback) {
    ItemCatResult result = itemCatService.getItemCatList();
    if (StringUtils.isBlank(callback)) {
      //需要把result轉(zhuǎn)換成字符串
      return result;
    }
    //如果字符串不為空,需要支持jsonp調(diào)用 spring4.1 以上可用
    MappingJacksonValue mappingJacksonValue = new MappingJacksonValue(result);
    mappingJacksonValue.setJsonpFunction(callback);
    return mappingJacksonValue;
  }

如圖,這就是jsonp

那么只要在js需要調(diào)用jsonp的地方稍加處理就能夠跨域調(diào)用數(shù)據(jù)了~

做了個例子,用來在頁面上展示jsonp:

(js寫的丑了點,本人后端出生,前端大俠們輕拍~)

var Menu = function () {

  return {
    getMenuData: function (json) {
      console.log(json);
      var data = json.data;
      var html = "";
      for (var i = 0 ; i < data.length ; i ++) {
        var url = data[i].u;
        var name = data[i].n;
        var sub = data[i].i;
        
        html += "";
        html += "<li class='dropdown-submenu'>";
        html += "<a href='" + url + "'>" + name;
        html += "<span class='c-arrow c-toggler'></span>";
        html += "</a>";
        html += "<ul class='dropdown-menu c-pull-right'>";
        
        for (var j = 0 ; j < sub.length ; j ++) {
          var url = sub[j].u;
          var name = sub[j].n;
          var node = sub[j].i;

          html += "<li class='dropdown-submenu'>";
          html += "<a href='" + url + "'>" + name;
          html += "<span class='c-arrow c-toggler'></span>";
          html += "</a>";
          
          html += "<ul class='dropdown-menu c-pull-right'>";
          for (var k = 0 ; k < node.length ; k ++) {
//            debugger
            var name = node[k];
            var last = name.split("|");
            
            html += "<li>";
            html += "<a href='" + last[0] + "'>" + last[1] + "</a>";
            html += "</li>";
          }
          html += "</ul>";
          html += "</li>";
        }
        
        html += "</ul>";
        html += "</li>";
        
      }
      $("#itemCatMenu").html(html); 
    },
    
    getJSONP: function (serverUrl, callbackFun) {
      $.ajax({
        type: "get",
        url: serverUrl,
        dataType: "jsonp",
        jsonp: "callback",
        jsonpCallback: callbackFun,
        success: function(json){
//          console.log(json);
        },
        error: function(e){
          if (e.status != "200") {
            console.log(e);
          }
        }
      });
    }
  };
  
}();

$(document).ready(function()
{
  var serverUrl = "http://localhost:8088/rest/menu/list";
  Menu.getJSONP(serverUrl, "Menu.getMenuData");
});

展示的效果:


相關(guān)文章

  • SpringCloud通過MDC實現(xiàn)分布式鏈路追蹤

    SpringCloud通過MDC實現(xiàn)分布式鏈路追蹤

    在DDD領(lǐng)域驅(qū)動設(shè)計中,我們使用SpringCloud來去實現(xiàn),但排查錯誤的時候,通常會想到Skywalking,但是引入一個新的服務(wù),增加了系統(tǒng)消耗和管理學(xué)習(xí)成本,對于大型項目比較適合,但是小的項目顯得太過臃腫了,所以本文介紹了SpringCloud通過MDC實現(xiàn)分布式鏈路追蹤
    2024-11-11
  • 使用Spring自定義命名空間

    使用Spring自定義命名空間

    這篇文章主要介紹了使用Spring自定義命名空間方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • Java ArrayList使用總結(jié)

    Java ArrayList使用總結(jié)

    這篇文章主要介紹了Java ArrayList使用總結(jié),幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下
    2021-03-03
  • Spring對靜態(tài)變量無法注入的解決方案

    Spring對靜態(tài)變量無法注入的解決方案

    這篇文章主要介紹了使用Spring對靜態(tài)變量無法注入的解決方案,具有很好的參考價值,希望對大家有所幫助。
    2021-07-07
  • 簡單實現(xiàn)Spring的IOC原理詳解

    簡單實現(xiàn)Spring的IOC原理詳解

    這篇文章主要介紹了簡單實現(xiàn)Spring的IOC原理詳解,具有一定借鑒價值,需要的朋友可以參考下。
    2017-12-12
  • Java實現(xiàn)統(tǒng)計文件夾下所有文件的字數(shù)

    Java實現(xiàn)統(tǒng)計文件夾下所有文件的字數(shù)

    這篇文章主要為大家詳細介紹了如何使用Java實現(xiàn)統(tǒng)計文件夾下所有文件的字數(shù),文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03
  • 淺談SpringBoot集成Quartz動態(tài)定時任務(wù)

    淺談SpringBoot集成Quartz動態(tài)定時任務(wù)

    這篇文章主要介紹了SpringBoot集成Quartz動態(tài)定時任務(wù),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • spring IOC中三種依賴注入方式

    spring IOC中三種依賴注入方式

    這篇文章主要介紹了spring IOC中三種依賴注入方式,Spring使用注入方式,為什么使用注入方式,這系列問題實際歸結(jié)起來就是一句話,Spring的注入和IoC(本人關(guān)于IoC的闡述)反轉(zhuǎn)控制是一回事
    2021-08-08
  • Java使用線程實現(xiàn)異步運行的方法

    Java使用線程實現(xiàn)異步運行的方法

    在Java中,實現(xiàn)異步運行的一個常用方式是使用Thread類,這篇文章主要介紹了Java使用線程實現(xiàn)異步運行,需要的朋友可以參考下
    2024-07-07
  • Netty分布式Server啟動流程服務(wù)端初始化源碼分析

    Netty分布式Server啟動流程服務(wù)端初始化源碼分析

    本章主要講解server啟動的關(guān)鍵步驟,?讀者只需要了解server啟動的大概邏輯,?知道關(guān)鍵的步驟在哪個類執(zhí)行即可,?并不需要了解每一步的運作機制,?之后會對每個模塊進行深度分析
    2022-03-03

最新評論

灌南县| 巴南区| 井陉县| 永修县| 武川县| 商南县| 都兰县| 石棉县| 衡东县| 濉溪县| 康平县| 大邑县| 山阳县| 嘉兴市| 奎屯市| 林甸县| 保康县| 格尔木市| 大埔区| 永州市| 云南省| 曲麻莱县| 泗水县| 益阳市| 淮滨县| 彝良县| 康乐县| 区。| 高雄市| 共和县| 黄大仙区| 元谋县| 郓城县| 托克逊县| 高邑县| 陆丰市| 东明县| 宣武区| 咸宁市| 顺义区| 祁东县|