jsonp解決跨域問題


跨域

  就是由於JavaScript同源策略的限制,使得a.com域名下的js無法操作b.com或c.a.com域名下的對象或數據。

      簡單理解同一個域就是:相同域名、相同端口、相同協議!

 

JS部分(使用jQuery):

1 var token = sa5d6a4d456ca5d46;
2 $.ajax({
3     url : "/user/token/" + token + ".action",
4     dataType : "jsonp",
5     type : "GET",
6     success : function(data){    
7     }
8 });

后台部分(SpringMVC):

方式一:

 1 //解決跨域問題方法一:
 2     @RequestMapping(value="/user/token1/{token}",produces = MediaType.APPLICATION_JSON_UTF8_VALUE)
 3     @ResponseBody
 4     public String getUserByToken1(@PathVariable String token, String callback){
 5         MyResult result = tokenService.getUserByToken(token);
 6         //響應結果之前,判斷是否為jsonp請求
 7         if (StringUtils.isNotBlank(callback)) {
 8             //把結果拼成一個js語句響應
 9             return callback + "(" + JsonUtils.objectToJson(result)  + ");";
10         }
11         return JsonUtils.objectToJson(result);
12     }

 方式二(使用Spring的工具類):

//解決跨域問題方法二:
    @RequestMapping(value="/user/token/{token}")
    @ResponseBody
    public Object getUserByToken2(@PathVariable String token, String callback){
        MyResult result = tokenService.getUserByToken(token);
        //響應結果之前,判斷是否為jsonp請求
        if (StringUtils.isNotBlank(callback)) {
            //把結果封裝成一個js語句響應
            MappingJacksonValue mappingJacksonValue = new MappingJacksonValue(result);
            mappingJacksonValue.setJsonpFunction(callback);
            return mappingJacksonValue;
        }
        return result;
    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM