使用JavaScript 实现各种跨域的方法

 更新时间:2013年05月08日 17:59:18   作者:  
本篇文章是对在JavaScript中实现各种跨域方法的介绍。需要的朋友参考下

一、一些概念

①传统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跨域等却是效率颇高的。

相关文章

  • HTML form表单提交方法案例详解

    HTML form表单提交方法案例详解

    这篇文章主要介绍了HTML form表单提交方法案例详解,本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-08-08
  • Javascript学习笔记6 prototype的提出

    Javascript学习笔记6 prototype的提出

    所以你还会再说是否用prototype都是一样的么?其实我以前也是这么理解的,在这次偶然的试验中看到了这个问题。
    2010-01-01
  • javascript的数据类型、字面量、变量介绍

    javascript的数据类型、字面量、变量介绍

    javascript的数据类型、字面量、变量介绍,学习js的朋友可以参考下
    2012-05-05
  • 详解JavaScript中shift()方法的使用

    详解JavaScript中shift()方法的使用

    这篇文章主要介绍了详解JavaScript中shift()方法的使用,是JS入门学习中的基础知识,需要的朋友可以参考下
    2015-06-06
  • JavaScript replace(rgExp,fn)正则替换的用法

    JavaScript replace(rgExp,fn)正则替换的用法

    再看jQuery源码的时候遇到了replace中参数为函数的用法,正好复习一下replace正则替换的用法。
    2010-03-03
  • javascript学习笔记(三)BOM和DOM详解

    javascript学习笔记(三)BOM和DOM详解

    本文应用了很多实例,来解读JavaScript中BOM和DOM,DOM是一个使程序和脚本有能力动态地访问和更新文档的内容、结构以及样式的平台和语言中立的接口。,而BOM定义了JavaScript可以进行操作的浏览器的各个功能部件的接口。
    2014-09-09
  • javascript之Boolean类型对象

    javascript之Boolean类型对象

    本文主要介绍javascript中的Boolean类型对象,Boolean对象非常简单,却非常有用,希望能给大家做一个参考。
    2016-06-06
  • JavaScript的继承实现小结

    JavaScript的继承实现小结

    JavaScript作为面向对象的弱类型语言,继承也是其非常强大的特性之一。那么如何在JS中实现继承呢?本文将给大家揭开神秘面纱
    2017-05-05
  • Javascript Objects详解

    Javascript Objects详解

    在JavaScript中,对象(Objects)是数据(变量),属性和方法。 几乎“一切”的JavaScript视为对象。日期,数组,字符串,函数的…在JavaScript中你也可以创建你自己的对象。
    2014-09-09

最新评论