使用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 相关文章推荐
baidu博客的编辑友情链接的新的层窗口!经典~支持【FF】
Feb 09 Javascript
JQuery中html()方法使用不当带来的陷阱
Apr 07 Javascript
一个基于jQuery的树型插件(OrangeTree)使用介绍
May 03 Javascript
jquery乱码与contentType属性设置问题解决方案
Jan 07 Javascript
jQuery获得内容和属性方法及示例
Dec 02 Javascript
js倒计时简单实现方法
Dec 17 Javascript
JavaScript设计模式开发中组合模式的使用教程
May 18 Javascript
AngularJS基础 ng-repeat 指令简单示例
Aug 03 Javascript
Vue的MVVM实现方法
Aug 16 Javascript
AngularJS的$location使用方法详解
Oct 19 Javascript
React优化子组件render的使用
May 12 Javascript
ES6 Class中实现私有属性的一些方法总结
Jul 08 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判断远程图片或文件是否存在的实现代码
2014/02/20 PHP
yii框架builder、update、delete使用方法
2014/04/30 PHP
php7 list()、session及其他模块的修改实例分析
2020/05/25 PHP
js获取div高度的代码
2008/08/09 Javascript
javascrip客户端验证文件大小及文件类型并重置上传
2011/01/12 Javascript
JavaScript的模块化:封装(闭包),继承(原型) 介绍
2013/07/22 Javascript
点击弹出层效果&amp;弹出窗口后网页背景变暗效果的实现代码
2014/02/10 Javascript
JS替换文本域内的回车示例
2014/02/18 Javascript
js实现连个数字相加而不是拼接的方法
2014/02/23 Javascript
jQuery多项选项卡的实现思路附样式及代码
2014/06/03 Javascript
javascript图片滑动效果实现
2021/01/28 Javascript
AngularJS 使用 UI Router 实现表单向导
2016/01/29 Javascript
总结javascript中的六种迭代器
2016/08/16 Javascript
js脚本编写简单刷票投票系统
2017/06/27 Javascript
微信小程序实现给嵌套template模板传递数据的方式总结
2017/12/18 Javascript
javascript实现滚动条效果
2020/03/24 Javascript
js实现简易ATM功能
2020/10/27 Javascript
Python实现带百分比的进度条
2016/06/28 Python
python实现字符串连接的三种方法及其效率、适用场景详解
2017/01/13 Python
利用pyuic5将ui文件转换为py文件的方法
2019/06/19 Python
Django 权限认证(根据不同的用户,设置不同的显示和访问权限)
2019/07/24 Python
Pycharm修改python路径过程图解
2020/05/22 Python
记录模型训练时loss值的变化情况
2020/06/16 Python
使用CSS3的box-sizing属性解决div宽高被内边距撑开的问题
2016/06/28 HTML / CSS
护理学毕业生自荐信
2013/10/02 职场文书
区域总监的岗位职责
2013/11/21 职场文书
童装店创业计划书
2014/01/09 职场文书
学生爱国演讲稿
2014/01/14 职场文书
《蜗牛》教学反思
2014/02/18 职场文书
优质服务演讲稿
2014/05/14 职场文书
社区务虚会发言材料
2014/10/20 职场文书
2016教师给学生的毕业寄语
2015/12/04 职场文书
机关干部正风肃纪心得体会
2016/01/15 职场文书
初中数学教学反思范文
2016/02/17 职场文书
检讨书怎么写?
2019/06/21 职场文书
争做文明公民倡议书
2019/06/24 职场文书