使用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 validate.js表单验证的基本用法入门
May 13 Javascript
在IE 浏览器中使用 jquery的fadeIn() 效果 英文字符字体加粗
Jun 02 Javascript
在线一元二次方程计算器实例(方程计算器在线计算)
Dec 22 Javascript
DOM节点删除函数removeChild()用法实例
Jan 12 Javascript
Bootstrap4一次重大更新 几乎涉及每行代码
May 16 Javascript
JS实现星星评分功能实例代码(两种方法)
Jun 09 Javascript
EasyUI 中combotree 默认不能选择父节点的实现方法
Nov 07 Javascript
JS实现的几个常用算法
Nov 12 Javascript
详解Vue 开发模式下跨域问题
Jun 06 Javascript
vue实现商城上货组件简易版
Nov 27 Javascript
谈谈React中的Render Props模式
Dec 06 Javascript
微信小程序实现获取准确的腾讯定位地址功能示例
Mar 27 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 ftp文件上传函数(基础版)
2010/06/03 PHP
PHP 利用Mail_MimeDecode类提取邮件信息示例
2014/01/26 PHP
php计算当前程序执行时间示例
2014/04/24 PHP
PHPThumb图片处理实例
2014/05/03 PHP
php字符串函数 str类常见用法示例
2020/05/15 PHP
js中判断控件是否存在
2010/08/25 Javascript
Javascript基础教程之关键字和保留字汇总
2015/01/18 Javascript
js实现跨域的方法实例详解
2015/06/24 Javascript
swtich/if...else的替代语句
2015/08/16 Javascript
js实现滚动条滚动到某个位置便自动定位某个tr
2021/01/20 Javascript
搞定immutable.js详细说明
2016/05/02 Javascript
Bootstrap3 图片(响应式图片&amp;图片形状)
2017/01/04 Javascript
javascript编程实现栈的方法详解【经典数据结构】
2017/04/11 Javascript
Angularjs实现上传图片预览功能
2017/09/01 Javascript
Vue的百度地图插件尝试使用
2017/09/06 Javascript
详解vue移动端日期选择组件
2018/02/22 Javascript
D3.js(v3)+react 实现带坐标与比例尺的散点图 (V3版本)
2019/05/09 Javascript
微信小程序实现图片选择并预览功能
2019/07/25 Javascript
Vue的props父传子的示例代码
2020/05/20 Javascript
[01:09]DOTA2次级职业联赛 - 99战队宣传片
2014/12/01 DOTA
[01:01:22]VGJ.S vs OG 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
Python中xml和dict格式转换的示例代码
2019/11/07 Python
推荐10个CSS3 制作的创意下拉菜单效果
2014/02/11 HTML / CSS
使用css3和jquery实现可伸缩搜索框
2014/02/12 HTML / CSS
在线吉他课程,学习如何弹吉他:Fender Play
2019/02/28 全球购物
利用指针变量实现队列的入队操作
2012/04/07 面试题
存储过程和sql语句的优缺点
2014/07/02 面试题
物业电工岗位职责
2013/11/20 职场文书
配件采购员岗位职责
2013/12/03 职场文书
新浪微博实习心得体会
2014/01/27 职场文书
网络教育自我鉴定
2014/02/04 职场文书
怎样拟定创业计划书
2014/05/01 职场文书
2016年党校科级干部培训班学习心得体会
2016/01/06 职场文书
2019年个人工作总结范文
2019/03/25 职场文书
直播实况, OMG破敌三路五十分钟大战神技局摩托车
2022/04/01 DOTA
JavaScript获取URL参数的方法分享
2022/04/07 Javascript