跨域 jsonp 跨域

Posted guangzhou11

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了跨域 jsonp 跨域相关的知识,希望对你有一定的参考价值。

jsonp 的例子

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>jsonp  跨域</title>
</head>
<body>
    <script>
        function  succ(data) 
            console.log(data)
//Object
// p: false
// q: "s"
// s: Array(10)
// 0: "双色球开奖结果"
// 1: "sk-ll"
// 2: "双色球"
// 3: "圣墟"
// 4: "switch"
// 5: "顺丰快递单号查询"
// 6: "神级龙卫"
// 7: "沈浪与苏若雪最新章节更新"
// 8: "申通快递单号查询"
// 9: "soul"
// length: 10
// __proto__: Array(0)
// __proto__: Object
        
    </script>
    <script  src="http://suggestion.baidu.com/su?wd=S&p=3&cb=succ&from=superpage">
    
    </script>
</body>
</html>

jsonp  的原理:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
    <script>
        function jsonp(url,params,cb) 
            //返回一个promise 的目的是 为了  下面的 then 函数返回数据
            return new Promise((resolve,reject)=>
                //创建script 
                let  script = document.createElement(script);
                // 声明方法
                 window[cb]= function  (data) 
                     resolve(data);
                     //得到数据移除script 标签
                     document.body.remove(script)
                 
                 //合并参数
                 params = ...params,cb;
                 let  arrs = [];
                 //遍历数组 将 wd=S ,cb=succ 以这种形式添加到数组中
                 for(let  key  in params ) 
                     arrs.push(`$key=$params[key]`)
                 
                 //链接script 
                 script.src = `$url?$arrs.join(&)`;
                 //添加到body  中
                 document.body.appendChild(script)
            )
        
        jsonp(
            url:http://suggestion.baidu.com/su?wd=S&cb=succ,
            params:
                wd:b
            ,
            cb:succ
        ).then(data=>
             console.log(data);
            //    q: "s", p: false, s: Array(10)
            //     p: false
            //     q: "s"
            //     s: (10) ["双色球开奖结果", "sk-ll", "双色球", "圣墟", "switch", "顺丰快递单号查询", "神级龙卫", "沈浪与苏若雪最新章节更新", "申通快递单号查询", "soul"]
            //     __proto__: Object
        )
    </script>
</body>
</html>

输出:

技术图片

 

 

jsonp 只能处理get  请求 

以上是关于跨域 jsonp 跨域的主要内容,如果未能解决你的问题,请参考以下文章

ajax跨域方法

WeX5 - AJAX跨域调用相关知识-CORS和JSONP

跨域解决方案

Java:ajax跨域问题

原生javascript里jsonp的实现原理

浏览器未在启用 CORS 的情况下跨域跨域发送 cookie