使用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事件绑定.on()简要概述及应用
Feb 07 Javascript
在Linux上用forever实现Node.js项目自启动
Jul 09 Javascript
jQuery中live()方法用法实例
Jan 19 Javascript
javascript中mouseover、mouseout使用详解
Jul 19 Javascript
JavaScript中的原型prototype完全解析
May 10 Javascript
JavaScript创建对象_动力节点Java学院整理
Jun 27 Javascript
浅谈事件冒泡、事件委托、jQuery元素节点操作、滚轮事件与函数节流
Jul 22 jQuery
微信小程序自定义toast组件的方法详解【含动画】
May 11 Javascript
JavaScript实现动态留言板
Mar 16 Javascript
vue-router的hooks用法详解
Jun 08 Javascript
json.stringify()与json.parse()的区别以及用处
Jan 25 Javascript
使用原生javascript开发计算器实例代码
Feb 21 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中的array_filter()函数去掉多维空值的代码分享
2012/09/07 PHP
php中使用key,value,current,next和prev函数遍历数组的方法
2015/03/17 PHP
Codeigniter中集成smarty和adodb的方法
2016/03/04 PHP
谈谈php对接芝麻信用踩的坑
2016/12/01 PHP
tp5(thinkPHP5框架)时间查询操作实例分析
2019/05/29 PHP
javascript 避免闭包引发的问题
2009/03/17 Javascript
基于jquery的tab切换 js原理
2010/04/01 Javascript
ExtJs使用总结(非常详细)
2012/03/22 Javascript
addEventListener和attachEvent二者绑定的执行函数中的this不相同
2012/12/09 Javascript
Ext4.2的Ext.grid.plugin.RowExpander无法触发事件解决办法
2014/08/15 Javascript
node.js中的console.warn方法使用说明
2014/12/09 Javascript
jQuery中:empty选择器用法实例
2014/12/30 Javascript
jQuery中:checkbox选择器用法实例
2015/01/03 Javascript
初步认识JavaScript函数库jQuery
2015/06/18 Javascript
简单谈谈node.js 版本控制 nvm和 n
2015/10/15 Javascript
必备的JS调试技巧汇总
2016/07/20 Javascript
基于AngularJS前端云组件最佳实践
2016/10/20 Javascript
基于JS实现横线提示输入验证码随验证码输入消失(js验证码的实现)
2016/10/27 Javascript
Node 自动化部署的方法
2017/10/17 Javascript
30分钟快速入门掌握ES6/ES2015的核心内容(上)
2018/04/18 Javascript
vue 内置过滤器的使用总结(附加自定义过滤器)
2018/12/11 Javascript
JavaScript动态创建二维数组的方法示例
2019/02/01 Javascript
JavaScript中AOP的实现与应用
2019/05/06 Javascript
Python描述器descriptor详解
2015/02/03 Python
python解决方案:WindowsError: [Error 2]
2016/08/28 Python
Python实现捕获异常发生的文件和具体行数
2020/04/25 Python
python 使用cycle构造无限循环迭代器
2020/12/02 Python
美国鲍勃商店:Bob’s Stores
2018/07/22 全球购物
监督检查工作方案
2014/05/28 职场文书
“四风”问题自我剖析材料思想汇报
2014/09/23 职场文书
2014年领导班子工作总结
2014/12/11 职场文书
电影复兴之路观后感
2015/06/02 职场文书
2016教师给学生的毕业寄语
2015/12/04 职场文书
Element实现动态表格的示例代码
2021/08/02 Javascript
JS封装cavans多种滤镜组件
2022/02/15 Javascript
Android Canvas绘制文字横纵向对齐
2022/06/05 Java/Android