理解 JSONP

2019-07-12  本文已影响0人  养乐多__

一、前置知识

  1. 页面与服务器的交互

在 AJAX 出现之前,页面与服务器的交互是怎么完成的呢?

  1. aimglinkscript 等都可以发请求;
    script 标签只有放在 bodyhead 里才会发请求,且只能发 get 请求。

  2. script 是不受域名限制的,任何一个网站都可以使用另一个网站的 JS。

二、JSONP

1. 自己理解 JSONP

JSONP
请求方:frank.com 的前端(浏览器)
响应方:jack.com 的后端(服务器)
1、请求方创建 script 标签,src 指向响应方,同时传一个查询参数
?callbackName===xxx
2、响应方根据查询参数 callbackName,构造形如 xxx.call(undefined, '需要的数据') / xxx('需要的数据') 的函数调用的响应。
3、浏览器接收到响应,就会执行 xxx.call(undefined, '需要的数据')
4、那么请求方就得到了需要的数据。
这就是 JSONP。

约定
1、callbackName --> callback
2、xxx --> 随机数

2. JSONP 定义

JSONP(JSON with Padding)是 JSON 的一种“使用模式”,可用于解决主流浏览器的跨域数据访问的问题。其核心思想是利用 JS 标签里面的跨域特性进行跨域数据访问,在 JS 标签里存在的是一个跨域的 URL,实际执行的时候通过这个 URL 获得一段字符串,这段返回的字符串必须是一个合法的 JS 调用,通过 EVAL 这个字符串来完成对获得数据的处理。

3. JSONP 为什么不支持 POST 请求?

因为 JSONP 是通过动态创建 script 标签实现的,而 scriptsrc 指定的 url 只能通过 get 方式获取,所以不支持 post 请求。

上一篇 下一篇

猜你喜欢

热点阅读