美文网首页极客
跨域请求 jsonp 原理

跨域请求 jsonp 原理

作者: 极客传 | 来源:发表于2019-02-15 22:41 被阅读0次

跨域:获取不同源的资源时,就属于跨域。源:协议、域名、端口。默认端口是80。三者任一不同就是跨域。

ajax 直接请求跨域的资源时,存在跨域无权限访问的问题。而页面上的引入 js 文件时则不受跨域影响,并且可以发现凡拥有 src 属性的标签,都拥有跨域的能力,比如 <script><img><iframe>

而跨域请求 jsonp 正是利用了,<script> 标签的跨域能力。

大致原理

首先在页面中定义一个 handle 函数,然后通过引入的 <script> ,传入参数并执行 handle 函数,传入的参数即页面期望跨域请求拿到的数据。

<!DOCTYPE html>
<html>
    <head>
        <script>
            function handle (data) {
                let res = JSON.parse(data);
                document.getElementById('result').innerHtml = res.result;
            }
        </script>
        <script src="http://www.xxx.com/test.js"></script>
    </head>
    <body>
        <p>
            result is <span id="result"></span>
        </p>
    </body>
</html>

test.js 文件内容如下:

// test.js
handle({"result": "riverjean"});

简单的 jsonp 实现

动态地创建 script 标签,实现 jsonp 请求:

<!DOCTYPE html>
<html>
    <head>
        <script>
            window.handle = function (data) {
                let res = JSON.parse(data);
                document.getElementById('result').innerHtml = res.result;
            }
            
            function jsonp (url, callback) {
                var script = document.createElement('script');
                var target = url + '?callback=' + callback;
                script.setAttribute(src, target);
                 document.getElementsByTagName('head')[0].appendChild(script);
            }
            jsonp('http://www.xxx.com/testjsonp', handle)
        </script>
    </head>
    <body>
        <p>
            result is <span id="result"></span>
        </p>
    </body>
</html>

然后服务端会返回一段代码给客户端执行:

handle({"result": "riverjean"});

相关文章

  • ajax跨域请求

    ajax跨域请求(jsonp) 利用JSONP解决AJAX跨域问题的原理与jQuery解决方案JSONP jQue...

  • 做demo和学习过程当中遇到的一些问题,收集的博文

    轻松搞定JSONP跨域请求--->关键字: 跨域, 同源策略, JSONP原理 git拉取远程分支到本地 git ...

  • js跨域问题

    来源 javascript中实现跨域的方式总结 第一种方式:jsonp请求;jsonp的原理是利用 标签的跨域特性...

  • 完成vue项目过程中的一些要点

    1、html适配移动端 2、vue实现双向绑定 跨域请求方法 1、jsonp原理利用 可以跨域请求js文件 所以...

  • JSONP技术原理及实现

    转自《跨域jsonp的原理》 首先确定为什么要用jsonp,因为要跨域请求数据,那为什么会发生跨域呢,因为浏览器的...

  • 跨域上传图片并预览

    跨域上传文件 之前解决跨域问题都是使用的JQuery的JSONP类型的Ajax请求,JSONP原理是让服务器把数据...

  • jsonp

    jsonp的跨域原理解析 背景: 由于浏览器同源策略的限制,非同源下的请求,都会产生跨域问题,jsonp就是为了解...

  • JSONP原理探究

    介绍   JSONP是一直种解决跨域问题的方案,实现的原理来自于页面中的 标签能够跨域请求资源。要通过JSONP实...

  • 2018-03-26 腾讯电面

    1、Jsonp的原理,如何利用Jsonp发送post请求? JSONP动态插入 元素,为其src属性指定一个跨域U...

  • 细说JSONP与Ajax的区别

    jsonp与ajax是两种截然不同的请求方式,了解它们的原理,我们先了解什么是跨域。跨域请求顾名思义就是请求超过自...

网友评论

    本文标题:跨域请求 jsonp 原理

    本文链接:https://www.haomeiwen.com/subject/tksveqtx.html