利用jsonp进行跨域已经是老生常谈了。主要原理是浏览器解析

一个简单的jsonp例子

const url = 'http://www.xxx.com/api/someThing?query=WITH_SOME_DATA&callback=handleResponse'

const scriptElement = document.createElement('script');

scriptElement.src = url;

document.body.appendChild(scriptElement)

JSONP的核心在于下面几点:

创建一个script标签,设置src为要调用的api并且看情况携带一些数据或者指定回调;

将标签添加到html文档中;

浏览器会自动根据src请求数据,并将response理解为Javascript执行。

这里假象了一下如果后端是nodejs的话大概会怎么做:

const callback = req.query.callback;

const data = ... //

const response = `${callback}(${JSON.stringify(data)})`

关键点在于:

后端的返回数据一定是可执行的JavaScript代码!!

后端的返回数据一定是可执行的JavaScript代码!!

后端的返回数据一定是可执行的JavaScript代码!!

所以刚刚我在response那里实际上拼接了一个函数调用。

那么回到浏览器这边,浏览器拿到CALLBACK_NAME(''some data")

那么就开始执行这个函数了。那么同时就要求前端要实现约定的回调函数,并暴露到全局环境

如果换做img标签来做这些事情

同理解析等元素,同样没有对域做安全限制。所以理论上只要能发出跨域的网络请求,都能用来实现跨域。

而大家总会使用script标签来做跨域无非是因为script标签能发出请求,并且能放一些代码放在回应里面,达到回调的效果。

所以理论上来说,如果考虑回调,需要使用script,使用jsonp技术。那么如果只是单纯地想跨域发一个request,那么选择script或者img等元素也无关紧要了。

img其实也能做一些事情

img元素能添加onError onLoad 属性,用于监听加载失败或者加载成功。

这意味着img实现请求成功或者失败的回调是OK的,但是接收不到server端的数据。

jsonready onload 与_漫谈JSONP以及img的onLoad和onEr相关推荐

  1. jsonready onload 与_【前端面试合集】面试题向三

    百度 1. 了解的库? Jquery:是一个js函数库 特性:html元素选取.操作 Css操作 Html事件函数 Js特效和动画 Html DOM遍历和修改 AJAX Utilities Zepto ...

  2. hive中实现行转列_漫谈数据仓库之拉链表(原理、设计以及在Hive中的实现)

    全文由下面几个部分组成: 先分享一下拉链表的用途.什么是拉链表. 通过一些小的使用场景来对拉链表做近一步的阐释,以及拉链表和常用的切片表的区别. 举一个具体的应用场景,来设计并实现一份拉链表,最后并通 ...

  3. auto errored after 报错解决_漫谈数据倾斜解决方案(干货)

    数据倾斜是大数据开发中经常会遇到的问题,而且基本是面试中的必问考点,本文是笔者根据搜集资料和阅读多篇博问的总结,全方位的从数据倾斜的定义.原因.解决方法.实例等角度进行解析.希望能帮助大家能对数据倾斜 ...

  4. 好文章要收藏_漫谈IT毕业生职业规划

    我在"漫谈程序员系列:咦,你也在混日子啊"一文中描述了一种混日子的现状,有朋友说该文只提到了设置目标告别混日子而没有展开论述"如何设立目标"."怎样为 ...

  5. 前后端部署在两台服务器 服务器配置要求_漫谈前后端分离

    前言--浅谈前后端 在我的脑海中一提到前端和后端,基本上第一个出现的区别点就是:后端是跟数据库跟服务器打交道的,前端是跟浏览器打交道的.似乎没有什么问题,大家都这么认为的.当然这没有什么错,我们一直以 ...

  6. kettle全量抽数据_漫谈数据平台架构的演化和应用

    随着科技的发展,数据在当代社会中所起的作用越来越大.阿里巴巴集团创始人马云在2014年提出了DT(Data Technology)的概念:"人类正从IT时代走向DT时代".DT的核 ...

  7. syslog 向内存中缓存_漫谈缓存(Cache)、大规模芯片系统的存储层次结构优化以及开源仿真工具ZSim...

    这次的话题将从缓存开始,以一种易于理解的方式向大家呈现缓存的基本概念,然后拓展至大规模芯片系统的非均一访问延时的缓存访问问题,最后简要介绍一种缓存仿真工具--ZSim. 缓存的概念 处理器和内存之间存 ...

  8. ddd架构 无法重构_漫谈分层架构:为什么要进行架构分层?

    为什么要分层 高内聚:分层的设计可以简化系统设计,让不同的层专注做某一模块的事 低耦合:层与层之间通过接口或API来交互,依赖方不用知道被依赖方的细节 复用:分层之后可以做到很高的复用 扩展性:分层架 ...

  9. redis 分布式锁 看门狗_漫谈分布式锁之Redis实现

    笔耕墨耘,深研术道. 01写在前面Redis是一个高性能的内存数据库,常用于数据库.缓存和消息中间件.它提供了丰富的数据结构,更适合各种业务场景:基于AP模型,Redis保证了其高可用和高性能. 本文 ...

最新文章

  1. 省选专练(学习)可持久化Trie树(BZOJ3261)
  2. 解决Ubuntu无法进行SSH连接的问题(以及如何使用SSH)
  3. 用python的turtle画正方形内切圆_Python 用turtle实现用正方形画圆的例子
  4. MySql数据的启动和停止以及SQLyog图形化工具的下载
  5. RxJava 的基本使用
  6. 通过 Nginx 来实现禁止国外IP访问网站
  7. TCPMP-interface相关文件函数解析-Mediainfo.c
  8. 华为对刷量、刷评论的惩罚是什么?有什么解决办法吗?
  9. mysql字符集校对_MySQL字符集与校对
  10. C# 判断圆与矩形的冲突
  11. c++11总结19——std::mutex
  12. Python骚操作之微信远程控制电脑
  13. 基于Qt模仿网易云音乐播放器
  14. 【日影】宇宙兄弟.Uchu.Kyodai.Chi——他们的宇宙梦,我的程序梦
  15. Extmail修改模板
  16. 兼容性测试,电脑的显示器分辨率大全
  17. Jack Server--Android N AOSP编译--Failed to contact Jack server
  18. Function是什么?
  19. 数码管显示数字的段码表共阳_《显示器件应用分析精粹》之(3)数码管静态显示...
  20. 宅急送快递门事件最新进展006

热门文章

  1. python面向对象实验报告_20192310 实验三《Python程序设计》实验报告
  2. linux mysql 查看字符集_Linux中查看和设置MySQL数据库字符集 一
  3. leetcode 每个结点的右指针 python
  4. 【转】Linux内存管理(最透彻的一篇)
  5. pod install 在1.0.0.beta.1 cocoapods版本显示错误
  6. 擠出機步進馬達的 Steps per Unit 該如何計算?
  7. 2011-10-13
  8. .net人员用Java 之Java EE
  9. ie 访问 java接口_2019年面试总结,100道Java程序员面试题(含答案)分享
  10. 减法运算的借位标志cf_数学|有理数运算法则及题型汇总