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"); });
展現的後果: