zoukankan      html  css  js  c++  java
  • JS跨域

    同源策略(所谓同源是指:域名、协议、端口相同。)

     同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响。可以说Web是构建在同源策略基础之上的,浏览器只是针对同源策略的一种实现。

    JSONP 跨域

    由于 script 标签不受浏览器同源策略的影响,允许跨域引用资源。因此可以通过动态创建 script 标签,然后利用 src 属性进行跨域,这也就是 JSONP 跨域的基本原理。

     JSONP方式调用

    1. 可以利用传统ajax实行实现数据请求
    2. 利用js自动生成一个回调函数.并且名称随意,发送请求时自动携带回调函数名称.   url?callback="XXXXXXXX"
    3. 动态获取回调函数名称,将数据进行封装  callback(JSON)

    JSONP实现跨域

    1.ajax请求

    <script type="text/javascript">
        $(function(){
            alert("测试访问开始!!!!!")
            $.ajax({
                url:"http://manage.jt.com/web/testJSONP",
                type:"get",                //jsonp只能支持get请求
                dataType:"jsonp",       //dataType表示返回值类型
                jsonp: "callback",     //指定参数名称
                //jsonpCallback: "hello",  //指定回调函数名称
                success:function (data){   //data经过jQuery封装返回就是json串
                    alert(data.itemId);
                    alert(data.itemDesc);
                    //转化为字符串使用
                    //var obj = eval("("+data+")");
                    //alert(obj.name);
                }    
            });    
        })
    </script>

     2. 编辑manage的Controller

    @RestController
    public class JSONPController {
        
        //约定回调函数名称 callback
        @RequestMapping("/web/testJSONP")
        public String testJSONP(String callback) {
            ItemDesc itemDesc = new ItemDesc();
            itemDesc.setItemId(10001L)
                    .setItemDesc("商品详情信息!!!!!!");
            String json = ObjectMapperUtil.toJSON(itemDesc);
            return callback+"("+json+")";
        }
    }

     3.API实现JSONP访问

    //利用API实现JSONP跨域访问
        @RequestMapping("/web/testJSONP")
        public JSONPObject testJSONP(String callback) {
            ItemDesc itemDesc = new ItemDesc();
    itemDesc.setItemId(10001L)
                    .setItemDesc("商品详情信息!!!!!!");
            return new JSONPObject(callback, itemDesc);
        }
  • 相关阅读:
    leetcode刷题11. 盛最多水的容器
    docker报错Service 'pwn_deploy_chroot' failed to build: Get https://registry-1.docker.io/v2/library/ubuntu/manifests/16.04:net/http: request canceled
    常用断点记录
    c++继承学习
    leetcode刷题正则表达式
    x64类型的程序逆向思考
    vs2013下配置x64版c++
    MFC学习RepositionBars
    flask权限控制
    leetcode刷题七<整数反转>
  • 原文地址:https://www.cnblogs.com/ming-long/p/11945148.html
Copyright © 2011-2022 走看看