使用JavaScript 实现各种跨域的方法


Posted in Javascript onMay 08, 2013

一、一些概念

①传统Ajax:交互的数据格式——自定义字符串或XML描述;

跨域——通过服务器端代理解决。

②如今最优方案:使用JSON格式来传输数据,使用JSONP来跨域。

③JSON:一种数据交换格式。基于纯文本、被原生JS支持。

    格式:两种数据类型描述符:大括号{ }、方括号[ ]。分隔符逗号、映射符冒号、定义符双引好。

④JSONP:一种跨域数据交互协议,非官方。

1、Web页面调用js文件,可跨域。扩展:但凡有src属性的标签都具有跨域能力。

2、跨域服务器 动态生成数据 并存入js文件(通常json后缀),供客户端 调用。

3、为了便于客户端使用数据,形成一个非正式传输协议,称为JSONP。该协议重点是允许用户传递一个callback参数给服务器,然后服务器返回数据时 将此callback参数作为函数名包裹住JSON数据,使得客户端可以随意定制自己的函数来自动处理返回数据。

二、JSONP实现

实例1——客户端单方面接收:

①客户端——在客户端设置创建一个函数对象,名称可为callFunc,用于接收服务器的js数据和对其进行处理。

js数据中的核心是:调用callFunc函数的同时附带着参数,此参数即data对象的值。

<script type="text/javascript">
    var callFunc = function(data){
        alert('远程js文件传来的数据:' + data.result);//data为服务器端的JSON数据对象。
    };
</script>
<script type="text/javascript" src="http://其他域的js文件.com/remote.js"></script>

②服务器端——直接调用客户端js中的函数,并传入数据。
callFunc({"result":"value1"});

实例2——客户端向服务器传送 指定函数名,服务器端接收该函数名 并调用对应函数 将数据以参数形式传入。
<script type="text/javascript">
    // 得到航班信息查询结果后的回调函数
    var flightHandler = function(data){
        alert('你查询的航班结果是:票价 ' + data.price + ' 元,' + '余票 ' + data.tickets + ' 张。');
    };
    // 动态添加链接服务器js文件的script。
// 在url地址中传递了一个code参数匹配JSON数据中的某个key,callback参数则告诉服务器:本地回调函数名为callFuncName。
    var url = "http://flightQuery.com/jsonp/flightResult.aspx?code=CA1998&callback=callFuncName";
    var script = document.createElement('script');
    script.setAttribute('src', url);
    // 将script元素在网页加载时插入head头部
    document.getElementsByTagName('head')[0].appendChild(script); 
</script>

总结:实现的代码并不复杂,但在实现Ajax跨域、frameset/iframe跨域等却是效率颇高的。
Javascript 相关文章推荐
jQuery效果 slideToggle() 方法(在隐藏和显示之间切换)
Jun 28 Javascript
在Javascript中 声明时用&quot;var&quot;与不用&quot;var&quot;的区别
Apr 15 Javascript
node.js中RPC(远程过程调用)的实现原理介绍
Dec 05 Javascript
分享两个手机访问pc网站自动跳转手机端网站代码
Dec 24 Javascript
JavaScript访问字符串中单个字符的两种方法
Jul 03 Javascript
基于Node.js的强大爬虫 能直接发布抓取的文章哦
Jan 10 Javascript
Angular 应用技巧总结
Sep 14 Javascript
JavaScript中双符号的运算详解
Mar 12 Javascript
浅谈JS函数节流防抖
Oct 18 Javascript
angular4实现tab栏切换的方法示例
Oct 21 Javascript
React+Webpack快速上手指南(小结)
Aug 15 Javascript
vue 中固定导航栏的实例代码
Nov 01 Javascript
jQuery根据纬度经度查看地图处理程序
May 08 #Javascript
使用JavaScript 实现对象 匀速/变速运动的方法
May 08 #Javascript
JavaScript 创建运动框架的实现代码
May 08 #Javascript
jQuery输入城市查看地图使用介绍
May 08 #Javascript
深入Javascript函数、递归与闭包(执行环境、变量对象与作用域链)使用详解
May 08 #Javascript
基于jquery实现拆分姓名的方法(纯JS版)
May 08 #Javascript
jQuery cdn使用介绍
May 08 #Javascript
You might like
文件上传程序的全部源码
2006/10/09 PHP
PHP异常Parse error: syntax error, unexpected T_VAR错误解决方法
2014/05/06 PHP
ThinkPHP实现一键清除缓存方法
2014/06/26 PHP
新浪微博OAuth认证和储存的主要过程详解
2015/03/27 PHP
PHP单例模式数据库连接类与页面静态化实现方法
2019/03/20 PHP
php 比较获取两个数组相同和不同元素的例子(交集和差集)
2019/10/18 PHP
javascript 树控件 比较好用
2009/06/11 Javascript
jquery加载页面的方法(页面加载完成就执行)
2011/06/21 Javascript
javascript几个易错点记录
2014/11/26 Javascript
express的中间件bodyParser详解
2014/12/04 Javascript
使用jQuery Mobile框架开发移动端Web App的入门教程
2016/05/17 Javascript
jQuery获取table行数并输出单元格内容的实现方法
2016/06/30 Javascript
详解JavaScript中的属性和特性
2016/12/08 Javascript
jquery实现提示语淡入效果
2017/05/05 jQuery
浅谈react-native热更新react-native-pushy集成遇到的问题
2017/09/30 Javascript
Vue 页面跳转不用router-link的实现代码
2018/04/12 Javascript
bootstrap自定义样式之bootstrap实现侧边导航栏功能
2018/09/10 Javascript
layDate日期控件使用方法详解
2018/11/15 Javascript
MySQLdb ImportError: libmysqlclient.so.18解决方法
2014/08/21 Python
机器学习经典算法-logistic回归代码详解
2017/12/22 Python
python-docx修改已存在的Word文档的表格的字体格式方法
2018/05/08 Python
python实现贪吃蛇游戏
2020/03/21 Python
Python下利用BeautifulSoup解析HTML的实现
2020/01/17 Python
Window系统下Python如何安装OpenCV库
2020/03/05 Python
基于PyQT实现区分左键双击和单击
2020/05/19 Python
Python爬虫之App爬虫视频下载的实现
2020/12/08 Python
乌克兰品牌化妆品和香水在线商店:Bomond
2020/01/14 全球购物
JPA的优势都有哪些
2013/07/04 面试题
工业设计专业推荐信
2013/10/29 职场文书
小学毕业感言500字
2014/02/28 职场文书
民主评议党员自我鉴定
2014/10/21 职场文书
个性与发展自我评价
2015/03/06 职场文书
如何撰写促销方案?
2019/07/05 职场文书
Python基于Tkinter开发一个爬取B站直播弹幕的工具
2021/05/06 Python
Pandas||过滤缺失数据||pd.dropna()函数的用法说明
2021/05/14 Python
MySQL实战记录之如何快速定位慢SQL
2022/03/23 MySQL