js实现跨域的方法实例详解


Posted in Javascript onJune 24, 2015

本文实例讲述了js实现跨域的方法。分享给大家供大家参考。具体分析如下:

由于同源策略的限制,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程序设计有所帮助。

Javascript 相关文章推荐
firefox浏览器下javascript 拖动层效果与原理分析代码
Dec 04 Javascript
javascript操作cookie的文章(设置,删除cookies)
Apr 01 Javascript
兼容主流浏览器的iframe自适应高度js脚本
Jan 10 Javascript
jQuery中阻止冒泡事件的方法介绍
Apr 12 Javascript
基于javascript实现checkbox复选框实例代码
Jan 28 Javascript
使用jquery获取url以及jquery获取url参数的实现方法
May 25 Javascript
AngularJS基础 ng-copy 指令实例代码
Aug 01 Javascript
浅析ES6的八进制与二进制整数字面量
Aug 30 Javascript
基于对象合并功能的实现示例
Oct 10 Javascript
解决vue组件中使用v-for出现告警问题及v for指令介绍
Nov 11 Javascript
vue.js引入外部CSS样式和外部JS文件的方法
Jan 06 Javascript
vue 实现websocket发送消息并实时接收消息
Dec 09 Javascript
JavaScript中的Promise使用详解
Jun 24 #Javascript
JavaScript面对国际化编程时的一些建议
Jun 24 #Javascript
对JavaScript的全文搜索实现相关度评分的功能的方法
Jun 24 #Javascript
在Mac OS下使用Node.js的简单教程
Jun 24 #Javascript
在Node.js应用中使用Redis的方法简介
Jun 24 #Javascript
浅析Node.js中使用依赖注入的相关问题及解决方法
Jun 24 #Javascript
浅析Node.js中的内存泄漏问题
Jun 23 #Javascript
You might like
php 取得瑞年与平年的天数的代码
2009/08/10 PHP
PHP 采集程序中常用的函数
2009/12/09 PHP
基于PHP输出缓存(output_buffering)的深入理解
2013/06/13 PHP
ThinkPHP5框架中使用JWT的方法示例
2020/06/03 PHP
[原创]站长必须要知道的javascript广告代码
2007/05/30 Javascript
js实现倒计时(距离结束还有)示例代码
2013/07/24 Javascript
javascript继承机制实例详解
2014/11/20 Javascript
学习JavaScript鼠标响应事件
2015/12/25 Javascript
基于JS实现Android,iOS一个手势动画效果
2016/04/27 Javascript
JS在一定时间内跳转页面及各种刷新页面的实现方法
2016/05/26 Javascript
jQuery使用getJSON方法获取json数据完整示例
2016/09/13 Javascript
React-Native左右联动List的示例代码
2017/09/21 Javascript
Node层模拟实现multipart表单的文件上传示例
2018/01/02 Javascript
js中数组对象去重的两种方法
2019/01/18 Javascript
微信小程序实现语音识别转文字功能及遇到的坑
2019/08/02 Javascript
Element-ui 自带的两种远程搜索(模糊查询)用法讲解
2021/01/29 Javascript
python mysqldb连接数据库
2009/03/16 Python
python如何对实例属性进行类型检查
2018/03/20 Python
Python打开文件,将list、numpy数组内容写入txt文件中的方法
2018/10/26 Python
python爬虫开发之使用Python爬虫库requests多线程抓取猫眼电影TOP100实例
2020/03/10 Python
Python基于paramunittest模块实现excl参数化
2020/04/26 Python
css3 条纹化和透明化表格Firefox下测试成功
2014/04/15 HTML / CSS
详解CSS中iconfont的使用
2015/08/04 HTML / CSS
英国家电直销:Appliances Direct
2016/09/22 全球购物
Booking.com德国:预订最好的酒店和住宿
2020/02/16 全球购物
西安启天科技有限公司网络工程师面试题笔试题
2016/06/12 面试题
string = null 和string = ''的区别
2013/04/28 面试题
经济学博士求职自荐信范文
2013/11/23 职场文书
网络维护中文求职信
2014/01/03 职场文书
机关会计岗位职责
2014/04/08 职场文书
婚前协议书
2014/04/15 职场文书
2016年学习贯彻十八届五中全会精神心得体会
2016/01/05 职场文书
JS实现简单控制视频播放倍速的实例代码
2021/04/18 Javascript
Nginx配置Https安全认证的实现
2021/05/26 Servers
Golang并发工具Singleflight
2022/05/06 Golang
微信小程序纯CSS实现无限弹幕滚动效果
2022/09/23 HTML / CSS