美文网首页
理解jsonp

理解jsonp

作者: 饿了爸 | 来源:发表于2019-08-16 17:18 被阅读0次

1 什么是jsonp

  • 首先,因为ajax无法跨域,然后开发者就有所思考
  • 其次,开发者发现, <script>标签的src属性是可以跨域的
  • 把跨域服务器写成 调用本地的函数 ,回调数据回来不就好了?
  • json刚好被js支持(object)
  • 调用跨域服务器上动态生成的js格式文件(不管是什么类型的地址,最终生成的返回值都是一段js代码)
  • 这种获取远程数据的方式看起来非常像ajax,但其实并不一样
  • 便于客户端使用数据,逐渐形成了一种非正式传输协议,人们把它称作JSONP。
  • 传递一个callback参数给跨域服务端,然后跨域服务端返回数据时会将这个callback参数作为函数名来包裹住json数据即可

2 jsonp 应用场景

js跨域通信

缺点:
1、只支持get
2、安全问题(callback参数恶意添加script标签,造成xss漏洞、跨域请求滥用,阻止非法站点恶意调用)

3 jsonp 如何使用

image.png

3.1 简单实现

远程服务器remoteserver.com根目录下有个remote.js文件代码如下:

localHandler({
  "result":"我是远程js带来的数据"
});

现在我们在jsonp.html页面定义一个函数,然后在远程remote.js中传入数据进行调用。
jsonp.html页面代码如下:

<!DOCTYPE html>
<html>
  <head>
    <title></title>
    <script type="text/javascript">
      var localHandler = function(data){
          alert('我是本地函数,可以被跨域的remote.js文件调用,远程js带来的数据是:' + data.result);
      };
    </script>
    <script type="text/javascript" src="http://remoteserver.com/remote.js"></script>
  </head>
  <body></body>
</html>

运行之后查看结果,页面成功弹出提示窗口,显示本地函数被跨域的远程js调用成功,并且还接收到了远程js带来的数据

3.2 优化

服务端提供的js脚本是动态生成,调用者可以传一个参数过去告诉服务端“我想要一段调用XXX函数的js代码,
服务器就可以按照客户端的需求来生成js脚本并响应

<!DOCTYPE html>
<html>
  <head>
    <title></title>
    <script type="text/javascript">
      // 得到航班信息查询结果后的回调函数
      var flightHandler = function(data){
          alert('你查询的航班结果是:票价 ' + data.price + ' 元,' + '余票 ' + data.tickets + ' 张。');
      };
      // 提供jsonp服务的url地址(不管是什么类型的地址,最终生成的返回值都是一段javascript代码)
      var url = "http://flightQuery.com/jsonp/flightResult.aspx?code=CA1998&callback=flightHandler";
      // 创建script标签,设置其属性
      var script = document.createElement('script');
      script.setAttribute('src', url);
      // 把script标签加入head,此时调用开始
      document.getElementsByTagName('head')[0].appendChild(script); 
    </script>
  </head>
  <body></body>
</html>
flightHandler({
  "code": "CA1998",
  "price": 1780,
  "tickets": 5
});

相关文章

  • jsonp理解

    1、一个众所周知的问题,Ajax直接请求普通文件存在跨域无权限访问的问题,甭管你是静态页面、动态网页、web服务、...

  • 理解 JSONP

    一、前置知识 页面与服务器的交互 在 AJAX 出现之前,页面与服务器的交互是怎么完成的呢? 通过提交 form ...

  • 理解jsonp

    1 什么是jsonp 首先,因为ajax无法跨域,然后开发者就有所思考 其次,开发者发现, 标签的src属性是可...

  • 理解JSONP 下

    理解JSONP 上 跨域SRJ 如果我访问其他网站的服务器,可以吗?由于JSONP可以规避同源策略,因此可以下面我...

  • 理解JSONP 上

    我们用node来做一个简易服务器理解JSONP,从而了解在没有Ajax的时代的前端是如何绞尽脑汁做好页面交互的 有...

  • 简单理解JSONP

    什么是同源策略? 浏览器出于安全方面的考虑,只允许与本域下的接口交互。不同源的客户端脚本在没有明确授权的情况下,不...

  • 常用前端面试问题

    跨域方法 Jsonp: 采用非同源限制标签进行处理请求,我理解的jsonp => json - page一个jso...

  • JSONP

    JSONP 是一种 JSON 的使用方式, 这里的P 可以理解为 Padding 的意思.为什么要用 JSONP ...

  • 你知道JSONP的三种跨越模式吗?

    JSONP解释 在解释JSONP之前,我们需要了解下”同源策略“这个概念,这对理解跨域有帮助。基于安全的原因,浏览...

  • 你知道JSONP的三种跨越模式吗?

    JSONP解释在解释JSONP之前,我们需要了解下”同源策略“这个概念,这对理解跨域有帮助。基于安全的原因,浏览器...

网友评论

      本文标题:理解jsonp

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