当前位置: 首页 > news >正文

ajax跨域原理

转ajax跨域的原理:

1.原因:浏览器的同源策略

2.Script可以避开同源策略检查。jsonp就利用了这样的原理。

jsonp主要是利用了 <script/> 标签对 javascript 文档的动态解析来实现。(其实也可以用eval函数)

来个超简单的例子:

Html代码   收藏代码
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  
  2. <html xmlns="http://www.w3.org/1999/xhtml" >  
  3. <head>  
  4.     <title>Test Jsonp</title>  
  5.     <script type="text/javascript">  
  6.             function jsonpCallback(result)  
  7.             {  
  8.             alert(result.msg);  
  9.             }  
  10.         </script>  
  11.     <script type="text/javascript" src="http://crossdomain.com/jsonServerResponse?jsonp=jsonpCallback"></script>  
  12. </head>  
  13. <body>  
  14. </body>  
  15. </html>   

 

其中 jsonCallback 是客户端注册的,获取跨域服务器上的json数据后,回调的函数。

http://crossdomain.com/jsonServerResponse?jsonp=jsonpCallback

这个 url 是跨域服务器取 json 数据的接口,参数为回调函数的名字,返回的格式为

 

Js代码   收藏代码
  1. jsonpCallback({msg:'this is json data'})  

 

Jsonp原理:

首先在客户端注册一个callback, 然后把callback的名字传给服务器。

 

此时,服务器先生成 json 数据。 

然后以 javascript 语法的方式,生成一个function , function 名字就是传递上来的参数 jsonp.

 

最后将 json 数据直接以入参的方式,放置到 function 中,这样就生成了一段 js 语法的文档,返回给客户端。

 

客户端浏览器,解析script标签,并执行返回的 javascript 文档,此时数据作为参数,传入到了客户端预先定义好的 callback 函数里.(动态执行回调函数)

附,其它跨域的方式:iframe等。http://blog.csdn.net/coldy456/article/details/5982712

相关文章:

  • 红利窗口关闭?AI能否在安防开枝散叶
  • EntityFramework之领域驱动设计实践(六)(转)
  • Linux菜鸟级重点
  • LUN Mapping和ZONE在存储网络中的应用
  • Intel发布P4501数据中心超薄固态盘 3200MB/s、二代3D TLC
  • 深入分析 Java I/O 的工作机制
  • 微软延长Skylake平台支持Windows 7/8.1生命周期
  • vi 命令合集
  • 让小城市享受大城市的便利
  • linux下使用飞信机器人告警
  • 号外!微信企业版真的来了
  • VM Esx 4.1 虚拟机安装ocfs2
  • 《OpenStack实战指南》—— 1.3 OpenStack的功能与作用
  • 陀飞轮
  • 有效的网络推广超级实用方法
  • Angular Elements 及其运作原理
  • CODING 缺陷管理功能正式开始公测
  • ECMAScript6(0):ES6简明参考手册
  • JSONP原理
  • leetcode386. Lexicographical Numbers
  • Next.js之基础概念(二)
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • PHP 7 修改了什么呢 -- 2
  • PHP 使用 Swoole - TaskWorker 实现异步操作 Mysql
  • VirtualBox 安装过程中出现 Running VMs found 错误的解决过程
  • 好的网址,关于.net 4.0 ,vs 2010
  • 基于Vue2全家桶的移动端AppDEMO实现
  • 记录一下第一次使用npm
  • 区块链分支循环
  • 网页视频流m3u8/ts视频下载
  • 湖北分布式智能数据采集方法有哪些?
  • 摩拜创始人胡玮炜也彻底离开了,共享单车行业还有未来吗? ...
  • ![CDATA[ ]] 是什么东东
  • # linux 中使用 visudo 命令,怎么保存退出?
  • (7)STL算法之交换赋值
  • (html5)在移动端input输入搜索项后 输入法下面为什么不想百度那样出现前往? 而我的出现的是换行...
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (原創) 人會胖會瘦,都是自我要求的結果 (日記)
  • (转)大型网站的系统架构
  • ./configure,make,make install的作用(转)
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .net mvc actionresult 返回字符串_.NET架构师知识普及
  • .net 反编译_.net反编译的相关问题
  • .NET 简介:跨平台、开源、高性能的开发平台
  • @Controller和@RestController的区别?
  • @JSONField或@JsonProperty注解使用
  • @vue/cli脚手架
  • [ vulhub漏洞复现篇 ] JBOSS AS 4.x以下反序列化远程代码执行漏洞CVE-2017-7504
  • [.NET 即时通信SignalR] 认识SignalR (一)
  • [android] 切换界面的通用处理
  • [CTF]php is_numeric绕过
  • [docker] Docker容器服务更新与发现之consul
  • [Excel]如何找到非固定空白格數列的條件數據? 以月份報價表單為例
  • [hdu4622 Reincarnation]后缀数组
  • [Java开发之路](14)反射机制