JS跨域方法及原理
JS跨域分析判断 |
JS跨域:在不同域之间,JS进行数据传输或通信。比如ajax向不同的域请求数据、JS获取iframe中的页面中的值(iframe内外不同域)
只要协议、端口、域名有一个不同则被当做不同的域
下表给出了相对于http://www.dmeiyang.com同源检测结果:

Jsonp跨域方法及原理 |
在JS中,我们直接用XMLHttpRequest请求不同域上的数据时,是不可以的。但是,在页面上引入不同域上的js脚本文件却是可以的,jsonp正是利用这个特性来实现的。
引入不同JS文件实现
在http://localhost:2014站点中有一个页面,现在需要请求http://localhost:2013/CrossDomain/GetJsonpData的数据。很明显这两不在一个域上,为了实现这个功能,我们可以这样写代码:
<script type="text/javascript">
function dosomething(jsondata) {
console.log(jsondata);
}
</script>
<script src="http://localhost:2013/CrossDomain/GetJsonpData?jsoncallback=dosomething"></script>
这里我们看到在请求地址后面有一个jsoncallback参数,惯例是使用callback这个参数名,但是如果http://localhost:2013这个站点不是你自己能控制的,就只能按照提供数据那一方的规定格式来操作了
下面是http://localhost:2013/CrossDomain/GetJsonpData定义的规则和返回数据
public string GetJsonpData(string jsoncallback)
{
//返回数据格式:jsoncallback({"Name":"dmeiyang","Age":20}) System.Text.StringBuilder sb = new System.Text.StringBuilder(); sb.Append(jsoncallback);
sb.AppendFormat("({0})", new { Name = "dmeiyang", Age = }.ToJsonByJsonNet()); return sb.ToString();
}
通过JQuery实现
后台代码不变,前台部分代码如下:
<div id="container">
<div>我要访问http://localhost:2013站点的数据</div>
<div>
<a class="at-jsonp" href="javascript:void(0);">点击一下,给我数据~</a>
</div>
<div>
<span>其他站点数据:</span>
<span class="data-jsonp" style="color: red"></span>
</div>
</div>
<script type="text/javascript">
$(function () {
$('#container .at-jsonp').on('click', function () {
$.ajax({
async: false,
url: "http://localhost:2013/CrossDomain/GetJsonpData",
type: "GET",
dataType: 'jsonp',
//jsonp的值自定义,如果使用jsoncallback,那么服务器端,要返回一个jsoncallback的值对应的对象.
jsonp: 'jsoncallback',
//要传递的参数,没有传参时,也一定要写上
data: { jsoncallback: "jsoncallback" },
timeout: ,
//返回Json类型
contentType: "application/json;utf-8",
//服务器段返回的对象包含name,data属性.
success: function (result) {
$('#container .data-jsonp').text('名称:' + result.Name + '-->年龄:' + result.Age);
},
error: function (jqXHR, textStatus, errorThrown) {
console.log(textStatus);
}
});
})
})
</script>
通过修改document.domain来跨子域 |
浏览器遵循同源策略。第一个限制是:不能通过ajax请求不同域下的数据(除非使用Jsonp);第二个限制是:不同域框架(iframe内外)之间不能进行js交互
例如:http://localhost:2014页面(A页)中放置一个iframe,让其加载http://localhost:2013/CrossDomain/iframetest页面(B页)。因为两者不同域,所以A页面是无法通过JS获取B页面里的内容的(当然你可以获取一个几乎无用的window对象)
为了实现上述情况两个页面之间可以互相调取数据,需要设置document.domain=“自身或者更高一级的父域”(两个页面都需要设置)
JS跨域方法及原理的更多相关文章
- 前端Js跨域方法汇总—剪不断,理还乱,是跨域
1.通过jsonp跨域2.通过修改document.domain来跨子域(iframe)3.隐藏的iframe+window.name跨域4.iframe+跨文档消息传递(XDM)5.跨域资源共享 C ...
- asp.net js 跨域方法二
@{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="view ...
- js中几种实用的跨域方法原理详解(转)
今天研究js跨域问题的时候发现一篇好博,非常详细地讲解了js几种跨域方法的原理,特分享一下. 原博地址:http://www.cnblogs.com/2050/p/3191744.html 下面正文开 ...
- JQuery和原生JS跨域加载JSON数据或HTML。
前提:有时候需要在网页上,加载另一个网站上的数据.或者加载另一个网站上的一个页面.Js的Ajax请求不具备跨域功能,可以使用JQuery来实现. 网页端JS代码: $(function () { $. ...
- js中几种实用的跨域方法原理详解
这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被 ...
- JS跨域(ajax跨域、iframe跨域)解决方法及原理详解(jsonp)
这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被 ...
- 【转】JS跨域(ajax跨域、iframe跨域)解决方法及原理详解(jsonp)
这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被 ...
- [转]js中几种实用的跨域方法原理详解
转自:js中几种实用的跨域方法原理详解 - 无双 - 博客园 // // 这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同 ...
- js中几种实用的跨域方法原理详解【转】
源地址:http://www.cnblogs.com/2050/p/3191744.html 这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通 ...
随机推荐
- C和C++混合编译
关于extern_C 通常,在C语言的头文件中经常可以看到类似下面这种形式的代码: #ifdef __cplusplus extern "C" { #endif /**** som ...
- office 2003和office 2013同时安装使用的问题
电脑上同时安装了Office 2003和Office 2007/2010,先打开Word 2003,然后再打开Word 2010,总会弹出安装配置界面,反之亦然. 解决方法:使用快捷键Win+R打开 ...
- jQuery遍历 slice()方法
今天做页面,遇到一个滚动的swipe,需要4个<li> 一组,然后在外层加个<ul>,方法如下: $('.xxxxx li').each(function(n){ $('.xx ...
- 手机NFC模拟门禁卡
楼主所在的某电子科技类大学,从宿舍楼到实验楼到图书馆办公楼,全部都有门禁,前两天突然在某安软件市场看到一个可以模拟门禁卡的软件,然而可能是我的手机系统太6了,竟然模拟不了,无奈自己动手,从根本上解决问 ...
- 【MVC】关于Action返回结果类型的事儿(上)
一. ASP.NET MVC 1.0 Result 几何? Action的返回值类型到底有几个?咱们来数数看. ASP.NET MVC 1.0 目前一共提供了以下十几种Action返回结果类型: 1. ...
- linux 文本处理
tr,awk,sed 一:tr 1.大小写转换 cat file | tr [a-z] [A-Z] > new_file(大写 --> 小写) cat file | tr [A-Z] [a ...
- SQL SERVER连接字符串学习
在使用connection string时遇到一些问题 字符串如下"Data Source= ******;Initial Catalog=******;Persist Security I ...
- MongoDb 与 Nodejs服务器的启动
1) 启动MongoDB : MongoDB —dbpath databaseNameFolder. 2) 启动数据库 : Mongo DatabaseName. 3) 启动NodeJs: Node ...
- 【积硅计划】http协议基础
http:超文本传输协议,它允许将超文本标记(html)文档从web服务器传送到浏览器.目前版本HTTP/1.1 http请求过程: proxy:代理服务器,网络信息的中转站.功能如下: ...
- .Net异步编程之Async与Await的使用
参考教程:http://www.cnblogs.com/x-xk/archive/2013/06/05/3118005.html http://www.cnblogs.com/tdws/p/56790 ...
JS跨域分析判断