程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Spring 4.1+JSONP的應用指南

Spring 4.1+JSONP的應用指南

編輯:關於JAVA

Spring 4.1+JSONP的應用指南。本站提示廣大學習愛好者:(Spring 4.1+JSONP的應用指南)文章只能為提供參考,不一定能成為您想要的結果。以下是Spring 4.1+JSONP的應用指南正文


JSONP就是為懂得決這一成績的,JSONP是英文JSON with Padding的縮寫,是一個非官方的協定。他許可辦事端生成script tags前往值客戶端,經由過程javascript callback的情勢來完成站點拜訪。JSONP是一種script tag的注入,將server前往的response添加到頁面是完成特定功效。

簡而言之,JSONP自己不是龐雜的器械,就是經由過程scirpt標簽對javascript文檔的靜態解析繞過了閱讀器的同源戰略。

現在的巨石運用曾經愈來愈不可了,許多互聯網在前期都邑在用散布式的架構

那末在頁面上分歧的辦事挪用分歧域名下的json是有成績的

(跨域:分歧域名,雷同域名然則分歧端口)

JavaScript標准中提到的json是不克不及直接跨域挪用,為了平安,然則能挪用js片斷

所以把json包裝為一個js片斷,也就是jsonp那末就可以夠跨域要求

在spring4.1後,供給了新的辦法可以作為jsonp的挪用

例:

@RequestMapping(value="/list")
  @ResponseBody
  public Object getItemCatList(String callback) {
    ItemCatResult result = itemCatService.getItemCatList();
    if (StringUtils.isBlank(callback)) {
      //須要把result轉換成字符串
      return result;
    }
    //假如字符串不為空,須要支撐jsonp挪用 spring4.1 以上可用
    MappingJacksonValue mappingJacksonValue = new MappingJacksonValue(result);
    mappingJacksonValue.setJsonpFunction(callback);
    return mappingJacksonValue;
  }

如圖,這就是jsonp

那末只需在js須要挪用jsonp的處所略加處置就可以夠跨域挪用數據了~

做了個例子,用來在頁面上展現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");
});

展現的後果:


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