jsonp跨域請求處理
Jsonp(JSON with Padding) 是 json的一種"使用模式",可以讓網頁從別的域名(網站)那獲取資料,繞過同源策略(若地址里面的協議、域名和端口號均相同則屬於同源),即跨域讀取數據。
jsonp:利用script標簽可以跨域,讓服務器端返回可執行的Javascript函數,參數為要回發的數據。可看做帶有回調函數的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",//數據類型為jsonp
jsonp: "jsonpCallback",//服務端用於接收callback調用的function名的參數
jsonpCallback:"自定義回調函數名"
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(協議跨域資源共享”)(Cross-origin resource sharing)
它允許瀏覽器向跨源服務器,發出XMLHttpRequest請求,從而克服了AJAX只能同源使用的限制 詳細介紹 戳此
- Access-Control-Allow-Origin:* 允許所有域名的腳本訪問該資源
- Access-Control-Allow-Methods:GET,POST,PUT,DELETE,OPTIONS 運行什么方式訪問資源
- Access-Control-Expose-Headers:x-requested-with 暴露的信息