跨域說明
跨域指請求和服務(wù)的域不一致,瀏覽器和H5的ajax請求有影響,而對服務(wù)端之間的http請求沒有限制。
跨域是瀏覽器攔截了服務(wù)器端返回的相應(yīng),不是攔截了請求。
jsonp跨域請求處理
Jsonp(JSON with Padding) 是 json的一種"使用模式",可以讓網(wǎng)頁從別的域名(網(wǎng)站)那獲取資料,繞過同源策略(若地址里面的協(xié)議、域名和端口號均相同則屬于同源),即跨域讀取數(shù)據(jù)。
jsonp:利用script標(biāo)簽可以跨域,讓服務(wù)器端返回可執(zhí)行的Javascript函數(shù),參數(shù)為要回發(fā)的數(shù)據(jù)。可看做帶有回調(diào)函數(shù)的ajax請求。
js代碼
<script type="text/javascript"> $(function(){ /* //簡寫形式,效果相同 $.getJSON("http://app.example.com/base/json.do?sid=1494&busiId=101&jsonpCallback=?", function(data){ $("#showcontent").text("Result:"+data.result) }); */ $.ajax({ type : "get", async:false, url : "http:/XXX", dataType : "jsonp",//數(shù)據(jù)類型為jsonp jsonp: "jsonpCallback",//服務(wù)端用于接收callback調(diào)用的function名的參數(shù) jsonpCallback:"自定義回調(diào)函數(shù)名" success : function(data){ alert(data.info) }, error:function(){ alert('fail'); } }); }); </script>
java后端處理代碼
@ResponseBody @RequestMapping(value = "/url", produces= MediaType.APPLICATION_JSON) public String test( HttpServletRequest request, HttpServletResponse response) throws Exception{ String result = getResult(); response.setHeader("Pragma", "no-cache"); response.setHeader("Cache-Control", "private,no-cache,no-store,max-age=0"); response.setDateHeader("Expires", 0); String str=request.getParameter("jsonpCallback"); if (str==null||str.equals("")) { return result; } else { return str + "(" + result + ")"; } }
CORS(協(xié)議跨域資源共享)(Cross-origin resource sharing)
它允許瀏覽器向跨源服務(wù)器,發(fā)出XMLHttpRequest請求,從而克服了AJAX只能同源使用的限制 詳細介紹 戳此
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持VeVb武林網(wǎng)。
新聞熱點
疑難解答
圖片精選