javascript实现跨域的方法汇总


Posted in Javascript onJune 25, 2015

由于同源策略的限制,XMLHttpRequest只允许请求当前源(包含域名、协议、端口)的资源。

json与jsonp的区别:

    JSON是一种数据交换格式,而JSONP是一种依靠开发人员创造出的一种非官方跨域数据交互协议。

script标签经常被用来加载不同域下的资源,可以绕过同源策略。(有src属性的都可以获取异域文件)。
如果请求的这个远程数据本身就是一段可执行的js,那么这些js会被执行(相当于eval)。

方法一:

利用script标签请求(<script src="http://....jsp?callback=回调函数名"></script>)
在使用script标签请求前,先进行回调函数的申明调用,

<script>
    function 回调函数名(data数据){  。。。。 }
  </script>
  <script src="http://....jsp?callback=回调函数名"></script>

使用JSON来传递javascript对象是一种最简单的方式了,这样的跨域通讯方式称为JSONP。
   
    远程服务器拼凑字符串:
        回调函数名( {"name1":"data1","name2","data2"} )
    这种以后台拼凑json数据,利用回调函数传参的形式返回给客户端
    (可以直接调用相当于已经将获取的字符串进行eval了处理)
    例如:function databack(data){ alert(data.name1) }  // 会输出显示"data1"

方法二:

jquery实现异域加载方法更为简单(与ajax异步请求方式相同)

$.ajax({
    type : "get",
    dataType:"json",
    success : function(data){ alert(data.name1) };
  })

    或者简写形式
    var url = "http://.....jsp?callback=?"; // 在jquery中此处的callback值可以为任意,因为

jquery进行处理后都是利用success回调函数进行数据的接受;
    $.getJSON( url, function(data){ alert(data.name1) });

方法三:

ajax跨域之服务端代理
    在同源的后台设置一个代理程序(proxy.jsp...);在服务器端与异域的服务器交互。
   
    jquery前台传输数据:
        例如:

$.get(
   
 'http://。。。.jsp',  // 代理程序地址
   
 {
    
   name1 : "data1",
    
   name2 : "data2"
    
 },
   
  function(data){
  
  if(data == 1) alert('发送成功!');
    
 }
 
 );

    后台数据的处理 :

String data1 = request.getParameter("name1");
    ........
    // 此处的url为另一域下的地址并带有参数
    String url = "http://.....com/.../sss.jsp?" + "name1=" + data1+ "name2=" + 

data2;
    // 跳转到另一个域进行数据的处理并返回json格式的数据
    request.getRequestDispatcher(url).forward(request,response);

方法四:

    利用iframe标签的src属性,进行跨域的访问,将获取到的值存储到当前的iframe中,然后再

同一页面进行获取该iframe的body内的值。

<body>
    <div id="show"></div>
    <iframe id="frame" style="display: none;"></iframe>
  </body>
  <script>
$("#frame").attr("src", "路径?time=" + new Date().getTime()).load(function(){
  // 获取iframe标签的值并进行获取,显示到页面
  $("#show").append("[data: " + $($("#frame").get(0).contentDocument).find("body").text() 

+ " ]");
});
  </script>

方法五:

    HTML5中websocket可以进行跨域的访问;

创建一个websocket对象:

var ws = new WebSocket(url);

主要处理的事件类型有(onopen,onclose,onmessage,onerror);

例如:

ws.onopen = function(){




console.log("open");




// 向后台发送数据




ws.send("open");



}

后台可以是java,php,nodejs等,对数据处理用时间onmessage事件对返回的值进行前端处理。

ws.onmessage = function(eve){




console.log(eve.data);



}
Javascript 相关文章推荐
jQuery中文入门指南,翻译加实例,jQuery的起点教程
Jan 13 Javascript
JavaScript中判断函数是new还是()调用的区别说明
Apr 07 Javascript
Extjs gridpanel 出现横向滚动条问题的解决方法
Jul 04 Javascript
javascript 寻找错误方法整理
Jun 15 Javascript
jQuery实现炫酷的鼠标轨迹特效
Feb 01 Javascript
jquery实现最简单的滑动菜单效果代码
Sep 12 Javascript
封装获取dom元素的简单实例
Jul 08 Javascript
js 将图片连接转换成base64格式的简单实例
Aug 10 Javascript
jQuery实现带右侧索引功能的通讯录示例【附源码下载】
Apr 17 jQuery
vue实现多组关键词对应高亮显示功能
Jul 25 Javascript
vue和小程序项目中使用iconfont的方法
May 19 Javascript
解决vant-UI库修改样式无效的问题
Nov 03 Javascript
浅谈JavaScript字符串拼接
Jun 25 #Javascript
javascript最基本的函数汇总
Jun 25 #Javascript
使用javascript将时间转换成今天,昨天,前天等格式
Jun 25 #Javascript
javascript中的Function.prototye.bind
Jun 25 #Javascript
jQuery实现为图片添加镜头放大效果的方法
Jun 25 #Javascript
jquery实现的缩略图预览滑块实例
Jun 25 #Javascript
使用javascript提交form表单方法汇总
Jun 25 #Javascript
You might like
如何在WIN2K下安装PHP4.04
2006/10/09 PHP
PHP实现原比例生成缩略图的方法
2016/02/03 PHP
PHP简单预防sql注入的方法
2016/09/27 PHP
PHP explode()函数用法讲解
2019/02/15 PHP
JavaScript 动态生成方法的例子
2009/07/22 Javascript
jQuery帮助之CSS尺寸(五)outerHeight、outerWidth
2009/11/14 Javascript
Prototype源码浅析 Enumerable部分(二)
2012/01/18 Javascript
Jquery动态添加及删除页面节点元素示例代码
2014/06/16 Javascript
js实现仿阿里巴巴城市选择框效果实例
2015/06/24 Javascript
JS面向对象编程详解
2016/03/06 Javascript
js判断checkbox是否选中个数的方法(超简单)
2016/08/19 Javascript
Javascript实现登录记住用户名和密码功能
2017/03/22 Javascript
利用js的闭包原理做对象封装及调用方法
2017/04/07 Javascript
node.js实现的装饰者模式示例
2017/09/06 Javascript
Vue精简版风格指南(推荐)
2018/01/30 Javascript
浅谈在react中如何实现扫码枪输入
2018/07/04 Javascript
react组件从搭建脚手架到在npm发布的步骤实现
2019/01/09 Javascript
js常见遍历操作小结
2019/06/06 Javascript
vue+iview实现文件上传
2020/11/17 Vue.js
详解Python中最难理解的点-装饰器
2017/04/03 Python
python去除字符串中的换行符
2017/10/11 Python
keras实现多GPU或指定GPU的使用介绍
2020/06/17 Python
CSS3的transition和animation的用法实例介绍
2014/08/20 HTML / CSS
localStorage、sessionStorage使用总结
2017/11/17 HTML / CSS
WEB控件及HTML服务端控件能否调用客户端方法?如果能,请解释如何调用?
2015/08/25 面试题
个人简历自我鉴定
2013/10/11 职场文书
兼职业务员岗位职责
2014/01/01 职场文书
体育专业学生自我评价范文
2014/01/17 职场文书
大学生就业策划书范文
2014/04/04 职场文书
法人代表授权委托书
2014/04/08 职场文书
求职信怎么写
2014/05/23 职场文书
经济管理自荐书
2014/06/09 职场文书
大学生简历自我评价2015
2015/03/03 职场文书
综合素质评价自我评价
2015/03/06 职场文书
商业计划书如何写?关键问题有哪些?
2019/07/11 职场文书
Python捕获、播放和保存摄像头视频并提高视频清晰度和对比度
2022/04/14 Python