HTML5学堂:本文当中我们介绍了跨域的基本知识,讲解到了跨域的相关种类,并讲解了解决跨域中的一种方法——如何使用iframe跨域。...本文仅仅讲明了iframe的跨域问题,想了解更多关于iframe标签的基本知识,直接发送 “iframe标签” 到 “HTML5学堂” 的微信。...什么是跨域 同源策略限制了一个源(origin)中加载文本或脚本与来自其它源(origin)中资源的交互方式。...AJAX申请,而这个AJAX的内容就是b.html要负责执行的内容;除了编写好AJAX申请之外,还需要在a.html文件“命令”b.html去执行(在当前这个步骤当中,b.html文件不需要书写任何代码...因此此处使用“h5course.com” Tips:可能你会问,b.html没有使用到jQuery,利利你为何还要加JQ的引入呢?
我们举例说明: 比如一个黑客,他利用iframe把真正的银行登录页面嵌到他的页面上,当你使用真实的用户名和密码登录时,如果没有同源限制,他的页面就可以通过javascript读取到你的表单中输入的内容... 5、使用window.name来进行跨域 跨域的原理解析及实现方法 1、JSONP(JSON with padding) 原理 : 我们知道,在页面上有三种资源是可以与页面本身不同源的...它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。它为Web服务器定义了一种方式,允许网页从不同的域访问其资源. ...标签完成加载B页面之后,再取iframe对象的contentDocument,否则如果B页面没有被iframe完全加载,在A页面中通过contentDocument属性就取不到B页面中的jQuery对象...一旦取到B页面中的jQuery对象,就可以直接发ajax请求了,这种类似“代理”方式可以解决主子域的跨域问题。
/javascript'; var iframe = document.createElement('iframe'); // 使用到了ES6的新字符串,方便看代码 var script_code...(); }; document.body.appendChild(iframe); 代码很简单,直接先通过iframe的src加载需要的页面,iframe的内容加载成功再插入进行数据解析的逻辑 默认开发者工具是不支持...jQuery的,但假如当前页面拥有jQuery,我们就可以直接使用了,如果没有,可以先插入一段引用本地JQ库的代码 如此,已经可以解析到页面内容 ?...Ajax请求 Ajax的请求处理也类似 在分析页面数据的获取时,有时候会发现数据是通过Ajax的异步JSON来获取的,我们相应的也使用这种异步方式 用原生的Ajax未免代码量太多,可以直接借助JQ的实现...至于这个错乱的顺序,是因为Ajax的异步特点,想要按顺序控制请求,可以加入一些Promise机制,或者用Generator生成器函数来实现一下即可 更多的用法自行去发掘吧
在浏览器中,、、iframe> 和 这几个标签是可以加载跨域(非同源)的资源的,并且加载的方式其实相当于一次普通的 GET 请求,唯一不同的是,为了安全起见,浏览器不允许这种方式下对加载到的资源的读写操作...,而只能使用标签本身应当具备的能力(比如脚本执行、样式应用等等)。...2. iframe,使用 iframe 其实相当于开了一个新的网页,具体跨域的方法大致是,域 A 打开的母页面嵌套一个指向域 B 的 iframe,然后提交数据,完成之后,B 的服务端可以: 返回一个...参数传递,这就意味着在结果数据量很大的时候需要分割传递,甚是麻烦;还有一个麻烦是 iframe 本身带来的,母页面和 iframe 本身的交互本身就有安全性限制。...v=1.0&q=football&callback=result 使用 JQuery 来调用就写成: $.getJSON("http://ajax.googleapis.com/ajax/services
更多详情见http://blog.zhangbing.club/Ja......所谓Javascript跨域问题,是指在一个域下的页面中通过js访问另一个不同域下的数据对象,出于安全性考虑,几乎所有浏览器都不允许这种跨域访问,这就导致在一些ajax和iframe应用中,使用跨域的web..., dataType: json }); 在jQuery 1.2 中,您可以通过使用 JSONP 形式的回调函数来加载其他网域的 JSON 数据,如 "myurl?...因为ajax本身实际上是通过XMLHttpRequest对象来进行数据的交互,而浏览器出于安全考虑,是不允许js代码进行跨域操作,进而会发警告,所以jquery ajax post 是行不通的,可能这时有人会说...使用flash 如果你要读取一个外部文件,比如swf,picture,mp3等等,那么就需要一个跨域策略文件,allow-access-from domain表示允许访问的URl,如果有多个依次添加,如果允许所有就一个
二、解决办法 跨域问题,更多的情况是出现在需要用ajax获取数据时,那么现在就先看个非跨域的栗子 (功能主要是从后台获取names列表,并展示出来) 前端部分: 的ajax方法;跨域的话,则会以异步加载js文件的形式来调用jsonp的回调函数。...第三: document.domain + iframe (iframe的使用主要是为了ajax通信) 不同的框架之间是可以获取window对象的,但却无法获取相应的属性和方法。...http://example.com/b.html 原理就是让这个iframe载入一个与你想要通过ajax获取数据的目标页面处在相同的域的页面,所以这个iframe中的页面是可以正常使用ajax去获取你要的数据的...所以要注意的是,只能使用name这个属性,使用诸如 window.name_1之类的是不行的 我现在使用var name= 就隐式地声明window.name了) 比如现在有两个不同域的a.html
同源策略是浏览器的行为,是为了保护本地数据不被JavaScript代码获取回来的数据污染,因此拦截的是客户端发出的请求回来的数据接收,即请求发送了,服务器响应了,但是无法被浏览器接收。...其主要限制以下几个方面: Cookie 、LocalStorage 和 IndexDB无法读取 无法获取或操作另一个资源的DOM AJAX请求不能发送 那么什么是同源呢?...这样可能不是很好理解,下面通过表格对比帮助大家理解: 此时,不允许同通信的页面之间想要实现通信,就要使用到跨域了。...常见跨域方案 1、 通过jsonp跨域 2、 document.domain+iframe跨域 3、 location.hash + iframe 4、 window.name + iframe跨域 5...请求时路径参数名 jsonpCallback:“callback”,//设置后端返回函数名 success:function(data){//回调函数 console.log(data); } }); 更多内容请见原文
send的里面 send相当于请求体 数据转换成这种格式 } jQuery Ajax Query其实就是一个JavaScript的类库,其将复杂的功能做了上层封装,使得开发者可以在其基础上写更少的代码实现更多的功能...由于HTML标签的iframe标签具有局部加载内容的特性,所以可以使用其来伪造Ajax请求。...把数据传给了iframe神奇的是iframe和form共用一个url和方式(POST) 。。.../" method="POST" target="ifr">#} {#重点来了,target参数是个关键点,是他让form把数据传给了iframe#} {#神奇的是iframe和form...,什么时候加载呢,不管什么标签只要内部有变化 //如文本,删除字标签了,增加个什么东西了都会重新加载这个标签,但是还有个问 //题第一次加载iframe标签的时候就触发onload事件了
简介 一次性从服务器数据库中读取数据并传送到前端页面上是不现实的,一方面会加重服务器的压力,另一方面客户的带宽资源也会被占用。Ajax刚好可以解决数据异步加载的问题。...由于用 jQuery 实现 ajax 比较简单,因此接下来的代码引用jQuery库实现Ajax,另外使用Django作为框架。 其中jQuery可以手动下载放到本地文件夹中,也可以引用下面的语句。...的div将展示Ajax数据 (document).ready(function(){})指页面其他元素加载完成后开始加载Ajax数据,此时,浏览器不会有加载条和转圈的情况出现。....getJSON(‘/ajax_server/’,function(ret)指从Django的view.py中的函数ajax_server读取JSON数据,数据通过(‘#demo’).append(ret...不过开发者已想出了种种办法来解决这个问题,HTML5之前的方法大多是在用户单击后退按钮访问历史记录时,通过创建或使用一个隐藏的IFRAME来重现页面上的变更。
JavaScript的原生实现执行速度更快。 尽量不要使用jQuery,而应该使用轻量的类库代替。如果是DOM操作可以使用zepto.js 。...(Facebook Graph API) 哪些情况应该使用SDK 一个建议 。 SDK内容 应该使用异步语法来加载脚本。 应该改善用户体验,SDK类库不应该影响主页面的加载。...jQuery, Node.js等等类库经常使用的一个方法是把创造私有命名空间的整个文件用闭包包起来,这样可以避免和其他模块冲突。...用Ajax请求和服务器通信,虽然可以用jQuery ajax请求,但这里我们有更好的方案实现它。...@更多讨论。 ? 你可能不需要JQuery 就像标题说的,你可能不需要jquery。
同源策略限制内容有: Cookie、LocalStorage、IndexedDB 等存储性内容 DOM 节点 AJAX 请求发送后,结果被浏览器拦截了 但是有三个标签是允许跨域加载资源: 了。你可能会疑问明明通过表单的方式可以发起跨域请求,为什么 Ajax 就不会?...因为归根结底,跨域是为了阻止用户读取到另一个域名下的内容,Ajax 可以获取响应,浏览器认为这不安全,所以拦截了响应。但是表单并不会获取新的内容,所以可以发起跨域请求。...:"show",//->自定义传递给服务器的函数名,而不是使用jQuery自动生成的,可省略 jsonp:"callback",//->把传递函数名的那个形参callback,可省略 success:function...原生WebSocket API使用起来不太方便,我们使用 Socket.io,它很好地封装了webSocket接口,提供了更简单、灵活的接口,也对不支持webSocket的浏览器提供了向下兼容。
优先级 如果发送的是【普通数据】 jQuery XMLHttpRequest iframe 如果发送的是【文件】 iframe jQuery(FormData) XMLHttpRequest(FormData...) 原生Ajax Ajax主要就是使用 【XmlHttpRequest】对象来完成请求的操作,该对象在主流浏览器中均存在(除早起的IE),Ajax首次出现IE5.5中存在(ActiveX控件) 1、XmlHttpRequest... 由于HTML标签的iframe标签具有局部加载内容的特性,所以可以使用其来伪造Ajax请求,进行偷偷的发送请求 views.py def ajax(request): return render...中,并拿到iframe中的数据 Ajax1();" /> ajax_json/" method="POST" target="ifm1"> iframe
同源 同源策略限制内容有: Cookie、LocalStorage、IndexedDB 等存储性内容 DOM 节点 AJAX 请求发送后,结果被浏览器拦截了 但是有三个标签是允许跨域加载资源: 了。你可能会疑问明明通过表单的方式可以发起跨域请求,为什么 Ajax 就不会?...因为归根结底,跨域是为了阻止用户读取到另一个域名下的内容,Ajax 可以获取响应,浏览器认为这不安全,所以拦截了响应。但是表单并不会获取新的内容,所以可以发起跨域请求。...jsonpCallback: "show",//->自定义传递给服务器的函数名,而不是使用jQuery自动生成的,可省略 jsonp: "callback",//->把传递函数名的那个形参callback...原生 WebSocket API 使用起来不太方便,我们使用Socket.io,它很好地封装了 webSocket 接口,提供了更简单、灵活的接口,也对不支持 webSocket 的浏览器提供了向下兼容
FormData无法得到文件的内容,而使用FileReader可以读取整个文件的内容。...上面,我们使用了三种方式获取文件内容,最后得到: FormData格式 FileReader读取得到的base64或者ArrayBuffer二进制格式 如果直接就是一个FormData了,那么直接用ajax...upload xhr.open("POST","/upload"); xhr.send(formData); 如果用jQuery的话,要设置两个属性为false: $.ajax({ url:"/upload...form.submit会触发表单提交,当请求完成(成功或者失败)之后就会触发iframe的onload事件,然后在onload事件获取返回的数据,如果请求失败了的话,iframe里的内容就为空,可以用这个判断请求有没有成功...对于老浏览器,可以使用一个iframe解决表单提交刷新页面或者跳页的问题。 总之,前端处理和上传本地文件应该差不多就是这些内容了,但是应该还有好多细节没有提及到,读者可通过本文列的方向自行实践。
src 属性值(url)指向的资源; 2) script 标签指向的资源文件被下载后,其中的内容会被立即执行; 3)服务器端的程序会解析 src 属性值中的 url 传递的参数,根据这些参数针对性返回一个...特有属性,name 值在不同的页面甚至不同域 ,当页面重新加载后依然存在,并且支持非常长的值,约 2MB。...= document.createElement("iframe"); // 加载跨域页面 ,先让页面的name执行赋值, iframe.src = url; // onload事件会触发...它实现了浏览器与服务器全双工通信,同时允许跨域通讯,是 server push 技术的一种很好的实现。...原生 WebSocket API 使用起来不太方便,我们使用 Socket.io,它很好地封装了 webSocket 接口,提供了更简单、灵活的接口,也对不支持 webSocket 的浏览器提供了向下兼容
二、什么是跨域 我们经常会在页面上使用ajax请求访问其他服务器的数据,此时,客户端会出现跨域问题. 跨域问题是由于javascript语言安全限制中的同源策略造成的....简单来说,同源策略是指一段脚本只能读取来自同一来源的窗口和文档的属性,这里的同一来源指的是主机名、协议和端口号的组合....这样会导致很多动态创建iframe的插件无法使用,比如说富文本编辑插件。...jquery中对jsonp的支持也是基于此方案。...4、使用apache反向代理实现跨域 由于前端解决跨域问题的局限性比较大,对于 Ajax 跨域或是 iframe 跨域,建议用服务器端解决方案。
Cookie、LocalStorage 和 IndexDB 无法读取 2.) DOM 和 Js对象无法获得 3.) AJAX 请求不能发送 常见跨域场景 ?...= document.createElement('iframe'); // 加载跨域页面 iframe.src = url; // onload事件会触发2次, 第1次加载跨域页...中间代理页,与a.html同域,内容为空即可。...需注意的是:由于同源策略的限制,所读取的cookie为跨域请求接口所在域的cookie,而非当前页。...原生WebSocket API使用起来不太方便,我们使用Socket.io,它很好地封装了webSocket接口,提供了更简单、灵活的接口,也对不支持webSocket的浏览器提供了向下兼容。
属性的独特之处:name值在不同的页面(甚至不同域名)加载后依旧存在,并且可以支持非常长的 name 值(2MB)。...= document.createElement('iframe'); // 加载跨域页面 iframe.src = url; // onload事件会触发2次,第1次加载跨域页...中间代理页,与a.html同域,内容为空即可。...它实现了浏览器与服务器全双工通信,同时允许跨域通讯,是server push技术的一种很好的实现。...原生WebSocket API使用起来不太方便,我们使用Socket.io,它很好地封装了webSocket接口,提供了更简单.灵活的接口,也对不支持webSocket的浏览器提供了向下兼容。
①iframe会阻塞主页面的Onload事件,搜索引擎的检索程序无法解读这种页面,不利于SEO; ②iframe和主页面共享连接池,而浏览器对相同域的连接有限制,所以会影响页面的并行加载。...我们举例说明:比如一个黑客程序,他利用Iframe把真正的银行登录页面嵌到他的页面上,当你使用真实的用户名,密码登录时,他的页面就可以通过Javascript读取到你的表单中input中的内容,这样用户名...②如果使用原生javascript开发的话,会面临很多问题,如浏览器兼容、Ajax数据解析、Dom、事件注册操作等都非常烦锁,而jQuery正好解决了这些问题。...6、ajax、get、post、ajaxSetup、getJSON各有何用途? ①ajax:jQuery对ajax执行的核心方法。其它ajax方法都是使用该方法实现。...11、你知道jQuery插件吗?你了解jQuery执行原理和插件机制吗?你都用过哪些jQuery插件? ①知道jQuery插件。 ②其原理是扩展jQuery本身及其核心函数的原型实现。
同源策略限制了一下行为: Cookie、LocalStorage 和 IndexDB 无法读取 DOM 和 JS 对象无法获取 Ajax请求发送不出去 常见的跨域场景 所谓的同源是指,域名、协议、端口均为相同...,该iframe的src指向服务器文件的地址(iframe标签src可以跨域),服务器文件里设置好window.name的值,然后再在index.html里面读取改iframe中的window.name...的子窗口是不能通信的,因为同源策略,所以改变子窗口的路径就可以了,将数据当做改变后的路径的hash值加载路径上,然后就可以通信了。...它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。 CORS需要浏览器和服务器同时支持。目前,所有浏览器都支持该功能,IE浏览器不能低于IE10。...原生WebSocket API使用起来不太方便,我们使用Socket.io,它很好地封装了webSocket接口,提供了更简单、灵活的接口,也对不支持webSocket的浏览器提供了向下兼容。