使用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判断客户端是手机还是PC的2个代码
Apr 12 Javascript
网页实时显示服务器时间和javscript自运行时钟
Jun 09 Javascript
js面向对象编程之如何实现方法重载
Jul 02 Javascript
使用jquery.qrcode生成彩色二维码实例
Aug 08 Javascript
node.js中的fs.symlink方法使用说明
Dec 15 Javascript
Javascript中arguments用法实例分析
Jun 13 Javascript
关于JS 预解释的相关理解
Jun 28 Javascript
vue自定义tap指令及tap事件的实现
Sep 18 Javascript
Vue项目引发的「过滤器」使用教程
Mar 12 Javascript
vue-cli history模式实现tomcat部署报404的解决方式
Sep 06 Javascript
jQuery加PHP实现图片上传并提交的示例代码
Jul 16 jQuery
在vue中使用eslint,配合vscode的操作
Nov 09 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
phpmyadmin的#1251问题
2006/11/25 PHP
求PHP数组最大值,最小值的代码
2011/10/31 PHP
PHP实现根据图片色界在不同位置加水印的方法
2015/08/08 PHP
CentOS7编译安装php7.1的教程详解
2019/04/18 PHP
javascript Discuz代码中的msn聊天小功能
2008/05/25 Javascript
JavaScript中__proto__与prototype的关系深入理解
2012/12/04 Javascript
JavaScript里四舍五入函数round用法实例
2015/04/06 Javascript
深入分析jsonp协议原理
2015/09/26 Javascript
jQuery实现图片预加载效果
2015/11/27 Javascript
AngularJS自动表单验证
2016/02/01 Javascript
需灵活掌握的Bootstrap预定义排版类 你精通吗?
2016/06/20 Javascript
基于jQuery实现中英文切换导航条效果
2016/09/18 Javascript
使用jQuery的load方法设计动态加载及解决被加载页面js失效问题
2017/03/01 Javascript
vue如何从接口请求数据
2017/06/22 Javascript
基于vue2.0动态组件及render详解
2018/03/17 Javascript
vue-router重定向不刷新问题的解决
2018/06/25 Javascript
微信小程序实现modal弹出框遮罩层组件(可带文本框)
2020/12/20 Javascript
[05:08]顺网杯ISS-DOTA2赛歌 少女偶像Lunar青春演绎
2013/12/05 DOTA
[03:49]辉夜杯现场龙骑士COSER秀情商“我喜欢芬队!”
2015/12/27 DOTA
Python编程实现使用线性回归预测数据
2017/12/07 Python
Python3实现的字典遍历操作详解
2018/04/18 Python
python写入已存在的excel数据实例
2018/05/03 Python
Django + Uwsgi + Nginx 实现生产环境部署的方法
2018/06/20 Python
如何通过Python实现标签云算法
2019/07/02 Python
GitHub上值得推荐的8个python 项目
2020/10/30 Python
css3实现信纸/同学录效果的示例代码
2018/12/11 HTML / CSS
原生 JS+CSS+HTML 实现时序图的方法
2019/07/31 HTML / CSS
澳大利亚厨房和家用电器购物网站:Bing Lee
2021/01/11 全球购物
教师业务学习材料
2014/12/16 职场文书
全陪导游词
2015/02/04 职场文书
医生个人年终总结
2015/02/28 职场文书
医院见习总结
2015/06/24 职场文书
药品销售员2015年终工作总结
2015/10/22 职场文书
PHP连接MSSQL数据库案例,PHPWAMP多个PHP版本连接SQL Server数据库
2021/04/16 PHP
pytorch实现手写数字图片识别
2021/05/20 Python
JavaScript流程控制(循环)
2021/12/06 Javascript