使用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 相关文章推荐
js获取单选框或复选框值及操作
Dec 18 Javascript
jquery处理json数据实例分析
Jun 03 Javascript
简介JavaScript中的getSeconds()方法的使用
Jun 10 Javascript
详解JavaScript操作HTML DOM的基本方式
Oct 21 Javascript
Angularjs中如何使用filterFilter函数过滤
Feb 06 Javascript
jQuery实现点击弹出背景变暗遮罩效果实例代码
Jun 24 Javascript
vue数据双向绑定原理解析(get &amp; set)
Mar 08 Javascript
详解Vue 动态添加模板的几种方法
Apr 25 Javascript
jQuery UI Draggable + Sortable 结合使用(实例讲解)
Sep 07 jQuery
又拍云 Node.js 实现文件上传、删除功能
Oct 28 Javascript
turn.js异步加载实现翻书效果
Jul 25 Javascript
js中addEventListener()与removeEventListener()用法案例分析
Mar 02 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
php 地区分类排序算法
2013/07/01 PHP
php使用memcoder将视频转成mp4格式的方法
2015/03/12 PHP
php实现倒计时效果
2015/12/19 PHP
php+html5实现无刷新图片上传教程
2016/01/22 PHP
Zend Framework动作助手(Zend_Controller_Action_Helper)用法详解
2016/03/05 PHP
一个非常实用的php文件上传类
2017/07/04 PHP
初探jquery——表单应用范例
2007/02/20 Javascript
jQuery getJSON 处理json数据的代码
2010/07/26 Javascript
使用JavaScript的ActiveXObject对象检测应用程序是否安装的方法
2014/04/15 Javascript
jQuery文件上传插件Uploadify使用指南
2014/06/05 Javascript
JavaScript判断表单提交时哪个radio按钮被选中的方法
2015/03/21 Javascript
JavaScript对象创建模式实例汇总
2016/10/03 Javascript
jQuery图片轮播(二)利用构造函数和原型创建对象以实现继承
2016/12/06 Javascript
使用cropper.js裁剪头像的实例代码
2017/09/29 Javascript
基于ajax和jsonp的原生封装(实例)
2017/10/16 Javascript
vue.js 底部导航栏 一级路由显示 子路由不显示的解决方法
2018/03/09 Javascript
再谈Angular4 脏值检测(性能优化)
2018/04/23 Javascript
Vue中 key keep-alive的实现原理
2018/09/18 Javascript
JavaScript实现连连看连线算法
2019/01/05 Javascript
JS script脚本中async和defer区别详解
2020/06/24 Javascript
Vue清除定时器setInterval优化方案分享
2020/07/21 Javascript
django 多数据库配置教程
2018/05/30 Python
numpy.linspace 生成等差数组的方法
2018/07/02 Python
对python 数据处理中的LabelEncoder 和 OneHotEncoder详解
2018/07/11 Python
django缓存配置的几种方法详解
2018/07/16 Python
Pandas读取MySQL数据到DataFrame的方法
2018/07/25 Python
TensorFlow设置日志级别的几种方式小结
2020/02/04 Python
Django跨域资源共享问题(推荐)
2020/03/09 Python
python绕过图片滑动验证码实现爬取PTA所有题目功能 附源码
2021/01/06 Python
K近邻法(KNN)相关知识总结以及如何用python实现
2021/01/28 Python
面试后感谢信怎么写
2014/02/01 职场文书
俞敏洪北大演讲稿
2014/05/22 职场文书
同学毕业留言寄语
2015/02/27 职场文书
2019大学生实习报告
2019/06/21 职场文书
Python爬虫之爬取最新更新的小说网站
2021/05/06 Python
CSS+HTML 实现顶部导航栏功能
2021/08/30 HTML / CSS