关于JSONP以及跨域问题,请自行搜索。

本文重点给出AJAX JSONP的模拟实现代码,代码中JSONP的基本原理也一目了然。

<html xmlns="http://www.w3.org/1999/xhtml">
<head><title>模拟实现AJAX JSONP源码</title><script type="text/javascript">// 生成随机字符串function randomString(len) {len = len || 32;var chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefhijklmnoprstuvwxyz1234567890";  var maxPos = chars.length;var pwd = '';for (i = 0; i < len; i++) {pwd += chars.charAt(Math.floor(Math.random() * maxPos));}return pwd;}function ajax_jsonp(data) {// 生成随机函数名并指向传入的回调函数var callbackfun = "jquery_" + randomString(32);eval( callbackfun+ " = data.success; "); // 提供jsonp服务的url地址(不管是什么类型的地址,最终生成的返回值都是一段javascript代码)var url = data.url + "&callback="+callbackfun;// 创建script标签,设置其属性var script = document.createElement('script');script.setAttribute('src', url);// 把script标签加入head,此时调用开始
        document.getElementsByTagName('head')[0].appendChild(script); }// 模拟调用
    ajax_jsonp({url: "http://sax.sina.com.cn/newimpress?adunitid=PDPS000000047325&rotate_count=36",success: function(data){alert('ID ' + data.ad[0].id );}});</script>
</head>
<body></body>
</html>

基本工作思路:

1. 创建一个随机字符串作为回调函数名

2. 把传入的回调函数赋值给随机函数。

3. 把该随机函数名作为callback参数补充到传入的URL(真正要访问的跨域的URL)中

4. 动态创建出script元素并触发URL的访问。浏览器获取返回的JS代码并执行,也就是执行了传入的回调函数。

(第三方URL返回的必须是一个合法的JS函数调用字符串,其中函数名是参数callback,参数是真正要返回的数据。)

参考文章(文中代码基于该参考文章修改)

转载于:https://www.cnblogs.com/zhangfanwen/p/5486860.html

AJAX JSONP源码实现(原理解析)相关推荐

  1. springfox源码_springfox-swagger原理解析与使用过程中遇到的坑

    swagger简介 swagger确实是个好东西,可以跟据业务代码自动生成相关的api接口文档,尤其用于restful风格中的项目,开发人员几乎可以不用专门去维护rest api,这个框架可以自动为你 ...

  2. (01)ORB-SLAM2源码无死角解析-(37) EPnP 算法原理详解→理论基础一:控制点选取、透视投影约束

    讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解的(01)ORB-SLAM2源码无死角解析链接如下: (01)ORB-SLAM2源码无死角解析-(00)目录_最新无死角讲 ...

  3. HashMap jdk1.7源码阅读与解析

    转载自  HashMap源码阅读与解析 一.导入语 HashMap是我们最常见也是最长使用的数据结构之一,它的功能强大.用处广泛.而且也是面试常见的考查知识点.常见问题可能有HashMap存储结构是什 ...

  4. 怎么证明建立了存储过程_【Filecoin源码仓库全解析】第七章:了解PoRep与PoSt并参与复制证明游戏

    欢迎大家来到第七章,经过前章<[Filecoin源码仓库全解析]第六章:如何单机部署多节点集群及矿池设计思路>的介绍,我们分享了如何在单机部署多节点集群的知识以及矿池设计的一些思路. 我们 ...

  5. 唯一插件化Replugin源码及原理深度剖析--插件的安装、加载原理

    上一篇 唯一插件化Replugin源码及原理深度剖析–唯一Hook点原理 在Replugin的初始化过程中,我将他们分成了比较重要3个模块,整体框架的初始化.hook系统ClassLoader.插件的 ...

  6. (02)Cartographer源码无死角解析-(32) LocalTrajectoryBuilder2D::AddRangeData()→点云的体素滤波

    讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解(02)Cartographer源码无死角解析-链接如下: (02)Cartographer源码无死角解析- (00)目录 ...

  7. (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t

    讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解的(01)ORB-SLAM2源码无死角解析链接如下(本文内容来自计算机视觉life ORB-SLAM2 课程课件): (0 ...

  8. (01)ORB-SLAM2源码无死角解析-(62) BA优化(g2o)→追踪线程:Optimizer::PoseOptimization→仅位姿优化

    讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解的(01)ORB-SLAM2源码无死角解析链接如下(本文内容来自计算机视觉life ORB-SLAM2 课程课件): (0 ...

  9. (01)ORB-SLAM2源码无死角解析-(63) BA优化(g2o)→局部建图线程:Optimizer::LocalBundleAdjustment→位姿与地图点优化

    讲解关于slam一系列文章汇总链接:史上最全slam从零开始,针对于本栏目讲解的(01)ORB-SLAM2源码无死角解析链接如下(本文内容来自计算机视觉life ORB-SLAM2 课程课件): (0 ...

最新文章

  1. JetBrains 宣布:IntelliJ 平台彻底停用 Log4j 组件,建议切换至 java.util.logging
  2. 2021年度(十四五)国家重点研发计划重点专项立项公示进展
  3. JavaScript定义函数的几种方式 1
  4. 45度地图之整体旋转
  5. vue传值到后端_Vue.js快速入门就从这儿开始特别是后端程序员
  6. 瓦片地图与geoserver发布
  7. Git版本控制常见操作
  8. 态度决定你的人生高度(一个人能否成功,就看他的态度)
  9. amp sqlserver中 什么意思_股票术语中的做空到底是什么意思?
  10. android 接口的调用方法参数类型转换,Android NDK开发之JNI基础
  11. 系统集成项目管理工程师目录
  12. pdf打印机如何加密pdf文件?
  13. URL和Socket
  14. android平板投屏,安卓手机投屏到平板
  15. 计算机符号mi,在线特殊符号大全
  16. NeurIPS 2020 | 基于协同集成与分发的协同显著性目标检测网络
  17. 认识区块链,认知区块链——NFT
  18. 织梦模板修改方法(转)
  19. 小小知识点(五)——MATLAB对复数的操作
  20. 伺服电机移动距离的计算

热门文章

  1. Ireport的安装及使用
  2. java装饰模式理解_Java设计模式之装饰模式趣谈
  3. 计算机视觉—TensorFlow入门(5)
  4. Java基础(二):基本数据类型和变量类型
  5. 《程序是怎样跑起来的》读书笔记——第三章 计算机进行小数运算时出错的原因...
  6. 20160408javaweb之JDBC 大二进制和大文件存取
  7. 如何解决空虚感?(转)
  8. 关于JXL读写以及修改EXCEL文件转
  9. java.util.concurrent包(2)——线程池
  10. 【转】linux/unix下 pid文件作用浅析