天天看點

java web跨域請求

使用jsonp,詳情請參考:http://json-p.org/

頁面代碼如下:

java web跨域請求

<!doctype html>  

<html>  

<head lang="en">  

    <meta charset="utf-8">  

    <title></title>  

    <script type="application/javascript"  >  

        function jsonpcallback(result) {    

            alert(json.stringify(result));    

            /*for(var i in result) {    

                alert(i+":"+result[i]);//循環輸出a:1,b:2,etc.    

            }  */  

        }    

        var jsonp=document.createelement("script");    

        jsonp.type="text/javascript";    

        jsonp.src="http://192.168.0.100:8080/tv_mobile/video/text2?callback=jsonpcallback";    

        document.getelementsbytagname("head")[0].appendchild(jsonp);    

     </script>  

</head>  

<body>  

</body>  

</html>  

 在浏覽器中通路的效果:

java web跨域請求
java web跨域請求

@responsebody  

    @requestmapping(value = "/text2",produces=systemhwutil.response_contenttype_javascript2 )  

    public string text2(httpservletrequest request, httpservletresponse response,string contenttype2,string callback)  

            throws ioexception {  

        string content = null;  

        map map = new hashmap();  

        map.put("filename", "a.txt");  

        content=jsonputil.getjsonp(map, callback);  

        system.out.println(content);  

        return content;  

    }  

 jsonputil.getjsonp 靜态方法的實作如下:

java web跨域請求

/*** 

     * 用于jsonp調用 

     * @param map : 用于構造json資料 

     * @param callback : 回調的javascript方法名 

     * @return 

     */  

    public static string getjsonp(map map,string callback)  

    {  

        objectmapper mapper = new objectmapper();  

        try {  

            content = mapper.writevalueasstring(map);  

            system.out.println(content);  

        } catch (jsongenerationexception e) {  

            e.printstacktrace();  

        } catch (jsonmappingexception e) {  

        } catch (ioexception e) {  

        }  

        if(valuewidget.isnullorempty(callback)){  

            return content;  

        return callback+"("+content+")";  

 依賴jackson 庫

背景傳回的内容是:jsonpcallback({"filename":"a.txt"})

content type是

java web跨域請求

注意:背景傳回的形式是:函數名(參數),此處的函數名就是回調函數的名稱

參考:

ajax 跨域請求 - jsonp擷取json資料:http://justcoding.iteye.com/blog/1366102