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

Spring 4.1+JSONP的使用指南

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

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

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

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

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

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

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

所以把json包裝為一個(gè)js片段,也就是jsonp那么就能夠跨域請(qǐng)求

在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ù)了~

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

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

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)文章

  • eclipse報(bào)錯(cuò) eclipse啟動(dòng)報(bào)錯(cuò)解決方法

    eclipse報(bào)錯(cuò) eclipse啟動(dòng)報(bào)錯(cuò)解決方法

    本文將介紹eclipse啟動(dòng)報(bào)錯(cuò)解決方法,需要了解的朋友可以參考下
    2012-11-11
  • java 數(shù)據(jù)結(jié)構(gòu)中棧和隊(duì)列的實(shí)例詳解

    java 數(shù)據(jù)結(jié)構(gòu)中棧和隊(duì)列的實(shí)例詳解

    這篇文章主要介紹了java 數(shù)據(jù)結(jié)構(gòu)中棧和隊(duì)列的實(shí)例詳解的相關(guān)資料,主要使用數(shù)組與線性表的方法來實(shí)現(xiàn),需要的朋友可以參考下
    2017-09-09
  • spring @Transactional 無效的解決方案

    spring @Transactional 無效的解決方案

    這篇文章主要介紹了spring @Transactional 無效的解決方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • Java字符串常見的操作(比較,查找,替換等)

    Java字符串常見的操作(比較,查找,替換等)

    在Java當(dāng)中,為字符串類提供了豐富的操作方法,對(duì)于字符串,我們常見的操作就是:字符串的比較、查找、替換、拆分、截取以及其他的一些操作,本文就詳細(xì)的介紹一下,感興趣的可以了解一下
    2022-01-01
  • Java必踩的坑之方法中形參、實(shí)參傳遞

    Java必踩的坑之方法中形參、實(shí)參傳遞

    這篇文章主要給大家介紹了關(guān)于Java必踩的坑之方法中形參、實(shí)參傳遞的相關(guān)資料,以及Java 形參和實(shí)參的區(qū)別,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-03-03
  • Java中單例模式的七種寫法示例

    Java中單例模式的七種寫法示例

    作為一個(gè)Java開發(fā)者,也許你覺得自己對(duì)單例模式的了解已經(jīng)足夠多了,但究竟你自己了解的程度到底怎樣呢?下面這篇文章主要給大家介紹了關(guān)于Java中單例模式的七種寫法,需要的朋友可以參考下
    2021-09-09
  • SSH框架網(wǎng)上商城項(xiàng)目第1戰(zhàn)之整合Struts2、Hibernate4.3和Spring4.2

    SSH框架網(wǎng)上商城項(xiàng)目第1戰(zhàn)之整合Struts2、Hibernate4.3和Spring4.2

    SSH框架網(wǎng)上商城項(xiàng)目第1戰(zhàn)之整合Struts2、Hibernate4.3和Spring4.2,感興趣的小伙伴們可以參考一下
    2016-05-05
  • Debian 7 和 Debian 8 用戶安裝 Java 8的方法

    Debian 7 和 Debian 8 用戶安裝 Java 8的方法

    Oracle Java 8 穩(wěn)定版本近期已發(fā)布,有很多新的特征變化。其中,有功能的程序支持通過“Lambda項(xiàng)目 ”,收到了一些安全更新和界面改進(jìn)上的bug修復(fù),使得開發(fā)人員的工作更容易。
    2014-03-03
  • java導(dǎo)出包含多個(gè)sheet的Excel代碼示例

    java導(dǎo)出包含多個(gè)sheet的Excel代碼示例

    這篇文章主要介紹了java導(dǎo)出包含多個(gè)sheet的Excel,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • java  中OkHttp的使用方法及實(shí)例

    java 中OkHttp的使用方法及實(shí)例

    這篇文章主要介紹了java 中OkHttp的使用方法及實(shí)例的相關(guān)資料,需要的朋友可以參考下
    2017-06-06

最新評(píng)論