1. 程式人生 > >java web支援jsonp跨域

java web支援jsonp跨域

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 暴露的資訊