Ajax(2)

Ajax上传

上传只能用post的方式,并且后台需要处理中文

         ajax对象.upload.onprogress   上传的进度事件

              e.loaded 已经上传文件的大小

              e.total  总文件的大小

         new FormData()     用来创建与表单格式相同的数据,它是由XMLHttpRequest 2级定义。

         FormData对象.append(文件名,文件值);//这里的文件值获取到的是一个二进制数据

           文件上传DOM对象.files   上传选中的所有文件列表,放在type为file的表单控件中

         对象里包括:最后修改的时间、大小、类型等等文件信息

跨域

两个不同域名下的数据进行交互。Ajax之所以不能跨域其实是因为XMLHttpRequest受到同源策略的限制,只能让它访问同源下的数据,不能访问不同源下的数据

同源策略

  每个网站只能读取同一来源的数据,这里的同一来源指的是主机名(域名)、协议(http/https)和端口号的组合。在没明确授权的情况下,不能读写对方的资源,它是浏览器最核心也最基本的安全功能              

   源:协议、端口、域名    (只要不同源就跨域)

协议                 

http超文本协议

https   HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议要比http协议安全

file  本地协议

ftp      文件共享协议

端口 :相当于酒店里一层的房间

域名       假设网站A的域名是:http://www.a.com/                   

下面是网站A的ajax数据源地址:

            http://www.a.com/c/d.html        请求成功   

            http://www.a.com/d/e/f.html      请求成功   

            https://www.a.com/a/c.html       请求失败  协议不同,跨域了

            http://www.a.com:81/a/c.html    请求失败  端口不同,跨域了

            http://www.b.com/a/b.html        请求失败  主机名不同,跨域了

  

跨域解决办法

                1、在标准浏览器下XMLHttpRequest配合后端设置一个请求权限

                   在php里写上  header('Access-Control-Allow-Origin:*');

                   这个是XMLHttpRequest 2级支持的,非标准浏览器不支持

                2、服务器代理

                   服务器文件可以访问你想要的资源,而你又能访问服务器文件,所以你就可以访问想要的资源

                   缺点:如果想访问的资源需求有变,对于后端的开发成本就很大

                3、iframe、flash、postMessage、WebSocket

                   http://www.freebuf.com/articles/web/65468.htm          

jsonp

jsonp也是一种跨域获取数据的方式,

跨域获取数据的原理:带src属性的<script><img><iframe><link>等标签是不需要遵守同源策略的,但是通过src加载的资源,浏览器限制了javascript的权限,只能读不能写      

注意:

       1、通过script标签引入某些数据,是同步模式的,只有上面的代码加载完成才能继续加载下面的代码一般在用script标签做跨域的时候,不建议将数据提前加载,应该按需加载

        2、当需要数据的时候创建一个script标签,将需要的数据放在src中,通过onload去监听是否请求过来,请求完毕就调用传回来的数据(异步加载)

        3、jsonp不能用post请求只能用get方式请求

            

                

             

                                

                

           

                        

                        

            

            

                        

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值