java 跨域-利用jsonp

Tomcat在 7.0.73, 8.0.39, 8.5.7 版本之前的可以用,不然后台报错

/**
     * 前端首页跳转后台
     */
    @RequestMapping("WebIndex.get")
    @ResponseBody
    public String WebIndex(HttpServletRequest request,HttpServletResponse response){
        response.setCharacterEncoding("UTF-8");
        response.setContentType("text/html;charset=UTF-8");
        //数据
        List studentList = new ArrayList<>();
        studentList.add("wu1");
        studentList.add("wu2");
        studentList.add("wu3");
        String result=new Gson().toJson(studentList);
        //前端传过来的回调函数名称
        String callback = request.getParameter("callback");     String callback2 = request.getParameter("name");//获得前端的参数
        System.out.println(callback2);
        //用回调函数名称包裹返回数据,这样,返回数据就作为回调函数的参数传回去了
        result = callback + "(" + result + ")";
        logger.debug("前端首页跳转后台");
        return result;
    }

返回的参数  result = callback + "(" + result + ")"; 括号里的result必须是Json字符串形式,我在这纠结了一整天

前端用jq的ajax 即可 ,虽然失败不会走error路线,但是保证成功就行

<script>
        window.onload=function(){
            //url格式:地址?openid=密码&nickname=账号,split进行分割
            var url = decodeURI(window.location.href);
            var argsIndex = url.split("?openid=");
            var argsIndex2 = argsIndex[1].split("&nickname=");
            var openid = argsIndex2[0];
            var nickname = argsIndex2[1];
            alert("openid="+openid+"---"+"nickname="+nickname)
            var ip = getip();
            ip += "WebIndex.get";
            var reqBody = {
                username: "id",
                password: "pwd"
            };
            var sendJson = {
                body: reqBody
            }
             $.ajax({
                    url: ip,
                    type: "GET",
                    dataType: "jsonp", //指定服务器返回的数据类型
                    data:{
                        ‘name‘:‘zuzuzu‘
                    },
                    success: function (data) {
                        var result = JSON.stringify(data); //json对象转成字符串
                        alert(result);
                    }
                });
        }
        //获得Ip地址
        function getip() {
            if(window.XMLHttpRequest) { // code for IE7+, Firefox, Chrome, Opera, Safari
                xmlhttp = new XMLHttpRequest();
            } else { // code for IE6, IE5
                xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
            }
            xmlhttp.open("GET", "../ip.xml", false);
            xmlhttp.send();
            xmlDoc = xmlhttp.responseXML;
            var ip = xmlDoc.getElementsByTagName("root")[0].childNodes[0].nodeValue;
            return ip
        }
    </script>

getip方法是从xml里读取地址,本方法是从后台重定向过来的,附带了参数,所以先进行拆分后面跟着的参数,不需要的可以直接看ajax,Tomcat服务器版本有要求,要注意看

原文地址:https://www.cnblogs.com/chaoswu/p/10174220.html

时间: 2024-08-30 04:53:24

java 跨域-利用jsonp的相关文章

Ajax 跨域请求 jsonp获取json数据

遇到Ajax的跨域请求出问题 找了中解决办法如下: 参考内容:http://justcoding.iteye.com/blog/1366102 由于受到浏览器的限制,该方法不允许跨域通信.如果尝试从不同的域请求数据,会出现安全错误.如果能控制数 据驻留的远程服务器并且每个请求都前往同一域,就可以避免这些安全错误.但是,如果仅停留在自己的服务器上,Web 应用程序还有什么用处呢?如果需要从多个第三方服务器收集数据时,又该怎么办? 理解同源策略 同源策略阻止从一个域上加载的脚本获取或操作另一个域上的

AJAX的跨域与JSONP

AJAX的跨域与JSONP 什么是AJAX的跨域请求 出于安全的考虑,如果你要从www.a.com通过Ajax来请求另外一个网站www.b.com的内容,浏览器是不允许你这样做的(不理解这里的安全是指什么?想想如果没有这个限制的话,黑客可以做些什么).那什么样的情况下算是跨域?域名不同那当然算是跨域了,例如a.com向b.com发送请求,这当然就是跨域了,不允许的.不过子域名不同(例如sub.a.com向www.a.com发送请求)甚至是同域名不同端口(例如a.com:80向a.com:8080

跨域 - 自定义 jsonp实现跨域

问题:在现代浏览器中默认是不允许跨域. 办法:通过jsonp实现跨域 在js中,我们直接用XMLHttpRequest请求不同域上的数据时,是不可以的.但是,在页面上引入不同域上的js脚本文件却是可以的,jsonp正是利用这个特性来实现的. 有两个站点: 1.要获取数据的站点:http://localhost:1326/Default.aspx 1.1页获取页面的json数据 2.要显示获取结果的站点 数据源页面的源码 protectedvoid Page_Load(object sender,

解决Ajax 跨域问题 - JSONP原理解析

解决Ajax 跨域问题 - JSONP原理解析 为什么会有跨域问题? - 因为有同源策略 同源策略是浏览器的一种安全策略,所谓同源指的是 请求URL地址中的 协议, 域名 和 端口 都相同,只要其中之一不相同就是跨域 同源策略主要为了保证浏览器的安全性 在同源策略下,浏览器**不允许**Ajax跨域获取服务器数据 http://www.example.com/detail.html 跨域请求: http://api.example.com/detail.html 域名不同 http://www.

JS跨域:jsonp、跨域资源共享、iframe+window.name

JS跨域:jsonp.跨域资源共享.iframe+window.name :https://www.cnblogs.com/doudoublog/p/8652213.html JS中的跨域 请求跨域有好多种, 一.跨域资源共享: 也就是设置服务端的header,可以指定哪些域名可以请求,也是最简单的跨域方式(自我感觉),并且可以支持post等等. //指定允许其他域名访问 'Access-Control-Allow-Origin:*'//或指定域 //响应类型 'Access-Control-A

jQuery(三) javascript跨域问题(JSONP解决)

加油~ --WH 一.什么是javascript跨域问题? 域:服务器域名,唯一标识(协议,域名,端口)必须保证一致,说明域相同 跨域:在一个服务器上,去访问另一个服务器上,并且得到另一个服务器返回回来的值,这就是javascript跨域,其实简单点,之前我们做的ajax,都是在同域中访问,现在只是访问的服务器变成了另外的,不是同一台了.仅此而已.但是这样一变,之前的代码就不能用了. 二.解决javascript跨域问题 解决该问题,有很多种方式,我百度了一下,好像这就属于前端的范畴了,所以我决

ajax跨域请求--jsonp实例

ajax请求代码: //区域事件选择配送点 function changeDistrict(value){ if(value == 0){ $('#transport_node').empty(); $('#transport_node').append('<option value="0">请选择</option>'); return; } $('#transport_node').empty(); $('#transport_node').append('&

ajax跨域之jsonp

跨域之jsonp jsonp跨域原理 script便签可以跨域,基于这个机制,可以在A域的页面中定义jsonp函数,script标签返回这个函数的调用 如下代码所示A域页面代码 <body> <div>正在获取数据--</div> <script>function jsonp(data) { document.querySelector('div').innerHTML = data; } </script> <!--向B域请求数据--&g

解决跨域的jsonp+Java实例

https://blog.csdn.net/buler_sky/article/details/70241481 页面的js代码 function getData( ) { $.ajax({ var d1=$("#d11").val(); url : "test/demoPage1.do", type : "GET", async:false, beforeSend : function(request) { }, data : { dtp1:d