###1.  JSONP

  JSONP由两部分组成:回调函数和数据

  JSONP是通过动态<script>元素来使用的,使用时可以为src属性指定一个跨域URL

    eg:

      function handelResponse(response){

        alert('''......')

      }

      var script = document.createElement("script");

      script.src = "http://..../json/?handelResponse" ;

      document.body.insertBefore(script,document.body.firstChild);

  缺点:JSONP是从其他域中加载代码执行      要确定JSONP请求是否失败并不容易

###2. Comet(“服务器推送”)

  Comet 是一种服务器向页面推送数据的技术,它本含两种方法:长轮询和流

    1.)长轮询/短轮询,两者最大的区别在于服务器如何发送数据。短轮询是服务器立即发送响应,无论数据是否有效,而长轮询是等待发送响应。

      无论是长轮询或短轮询,浏览器都要在接收数据前先发起对服务器的链接,且服务器在浏览器打开状态下一直保持连接打开

    2.)HTTP流

      浏览器向服务器发送一个请求,而服务器保持连接打开,然后周期性的向浏览器发送数据

      eg:

        function fn(url, prog ,finish){

          var xhr = new XMLHttpRequest();

          var strNum = 0;

          xhr.open("get",url,true);

          xhr.onreadystatechange = function(){

            var resulet ;

            if(xhr.readyState == 3){

              result = xhr.responseText.substring(strNum);

              strNum += result.length;

              prog(result);         

            }elset if(xhr.readyState == 4){

              finish(xhr.responseText);

            } 

          }

          xhr.send(null);

          return xhr;

        }

        var a = fn("xxx.php",function(data){

            alert("Received:" +data)

          },function(data){

            alert("Done!");

          });

###3.新增两个Comet接口

  3.1)服务器发送事件(SSE)

    SSE API用于创建到服务器的单向链接,服务器可以通过这个链接发送任意数量的数据。服务器相应的MIME格式必须是text/event-stream

                   MIME类型: 每当浏览器请求一个页面时,web服务器会在发送实际页面内容之前,先发送一些头信息;任何资源都有自己的MIME类型;

                    eg:        Content-Type="text/event-stream"   /   <meta http-equiv="Content-Type" content="text/html";>

    3.1.1)SSE API

      JavaScript使用SSE:创建新的EventSource对象,并传入一个入口点:

        var source = new EventSource("xxx.php");

      传入的URL必须与创建对象的页面同源(相同的URL模式·域及端口)

      该source实例对象含一个readyState属性, 0 为正连接到服务器;1表示打开了链接;2表示关闭了链接

      及以下三个事件

        open:在建立连接时触发

        message:再从服务器接收到新事件时触发

          source.onmessage = function(event){

            var data = event.data;      //   服务器发回的数据以字符串形式保存在event.data中

          }

        error:在无法建立连接是触发

    强制断开链接:   source.close();

    3.1.2)事件流

  3.2)Web Sockets

    一个单独的持久连接上提供全双工·双向通信;

    使用标准的HTTP服务器无法实现Web Sockets;

  由于它使用了自定义的协议,所以URL模式也略有不同。未加密的不是http://   而是 ws://      ;    加密的不是https://  而是 wss://

    3.2.1)  创建实例对象

      var socket = new WebSocket("ws://www.xxx.com/abc.php");

      传入的URL必须为绝对的,同源策略对它不适用。

      实例化对象与XHR类似,websocket也有一个表示当前状态的readyState属性:

        WebSocket.OPENING(0):正在建立连接

        。。。.OPEN(1):已经建立连接

        .CLOSING(2):正在关闭连接

        .CLOSE(3):已经关闭

      socket.close();      // 在任何时候可以调用该方法,关闭连接

      3.2.2) 发送和接受数据

      socket.send("xxx");   // 可传入任意字符串

      WebSocket只能发送纯文本数据,因此在传送复杂数据之前,需进行序列化处理;

      eg:   // 传送一个json数据

      var msg = {

        "name" : "John",

        "age":  23

      }

      socket.send(JSON.stringify(msg));

      当服务器接收后并返回消息是,WebSocket对象会触发message事件,该事件与其他传递消息的协议类似,也将返回数据保存在event.data属性中

        socket.onmessage = function(event){

          event = event || window.event;

          var data = event.data;      

          // 注意:event.data保存的数据与send发送的数据相同,都为字符串格式

          ...

        }

    3.2.3) 其他事件

      open、erro、close(webCoean、code、reason)

js-其他跨域技术(JSONP`Comet)的更多相关文章

  1. 跨域技术-jsonp

    JSONP是JSON with padding 的简写,其有两个部分组成,一个是回调函数,一个是数据,其基本格式如下 function handleResult(result){ alert(resu ...

  2. js&jquery跨域详解jsonp,jquery并发大量请求丢失回调bug

    URL  说明 是否允许通信 http://www.a.com/a.js http://www.a.com/b.js 同一域名下 允许 http://www.a.com/lab/a.js http:/ ...

  3. JS跨域:jsonp、跨域资源共享、iframe+window.name

    JS跨域:jsonp.跨域资源共享.iframe+window.name :https://www.cnblogs.com/doudoublog/p/8652213.html JS中的跨域 请求跨域有 ...

  4. 循序渐进Python3(十一) --6--  Ajax 实现跨域请求 jsonp 和 cors

    Ajax操作如何实现跨域请求?       Ajax (XMLHttpRequest)请求受到同源策略的限制.       Ajax通过XMLHttpRequest能够与远程的服务器进行信息交互,另外 ...

  5. 跨域利器JSONP(转)

    何为跨域?何为JSONP?JSONP技术能实现什么?是否有必要使用JSONP技术? 跨域 就是由于JavaScript同源策略的限制,使得a.com域名下的js无法操作b.com或c.a.com域名下 ...

  6. 前端跨域解决方案: JSONP的通俗解说和实践

     对于前端开发者而言,跨域是一个绕不开的话题.只有真正明白了各种方案的工作机制,才能针对性地进行跨域方案选型.本文将以探索者的视角,试图用最通俗的语言对一种"鼎鼎大名"的跨域解决方 ...

  7. jQuery(三) javascript跨域问题(JSONP解决)

    加油~ --WH 一.什么是javascript跨域问题? 域:服务器域名,唯一标识(协议,域名,端口)必须保证一致,说明域相同 跨域:在一个服务器上,去访问另一个服务器上,并且得到另一个服务器返回回 ...

  8. 浏览器同源策略,跨域请求jsonp

    浏览器的同源策略 浏览器安全的基石是"同源政策"(same-origin policy) 含义: 1995年,同源政策由 Netscape 公司引入浏览器.目前,所有浏览器都实行这 ...

  9. JS JSOP跨域请求实例详解

    JSONP(JSON with Padding)是JSON的一种“使用模式”,可用于解决主流浏览器的跨域数据访问的问题.这篇文章主要介绍了JS JSOP跨域请求实例详解的相关资料,需要的朋友可以参考下 ...

随机推荐

  1. JavaScript显示文本框后自动获取焦点

    废话少说,见官方文档: 他的用法是:document.getElementById('username').focus();                   这样写在display:block;显 ...

  2. ZooKeeper Observers解决节点过多时写性能下降问题

    ZooKeeper Observers Observers: Scaling ZooKeeper Without Hurting Write Performance How to use Observ ...

  3. spark on yarn模式:yarn命令杀除当前的application

    在hadoop/bin目录下有yarn命令 yarn application -kill <applicationId>

  4. Gulp的简单使用

    我比较喜欢使用Gulp,因为简单好用! 今天的任务是:使用Gulp来压缩 jQuery源码,各输出一个压缩的和未压缩的版本 第一步:安装 cnpm install gulp --save-dev cn ...

  5. rem实现自适应

    总结一下,rem实现自适应:用rem代替px,配合媒体查询设置font-size:n%. 首先,px是死的.若一律用px,那就会大的显得小,小的屏幕显得大.其次,rem是活的,通过设置字体大小可以引起 ...

  6. 16.ajax_case03

    # 抓取非小号的图表接口 # https://www.feixiaohao.com/currencies/raiden-network-token/ import requests import js ...

  7. idea在maven打包时运行Test测试, 导致打包失败, 乱七八糟的错误

    在maven打包时运行Test测试, 导致打包失败, 乱七八糟的错误 在maven projects中图标toggle'skip Tests' Mode //宏杰帮助 网上案例:https://blo ...

  8. 强化学习(四)—— DQN系列(DQN, Nature DQN, DDQN, Dueling DQN等)

    1 概述 在之前介绍的几种方法,我们对值函数一直有一个很大的限制,那就是它们需要用表格的形式表示.虽说表格形式对于求解有很大的帮助,但它也有自己的缺点.如果问题的状态和行动的空间非常大,使用表格表示难 ...

  9. 根据JavaBean创建数据库的操作SQL

    根据JavaBean创建数据库的操作SQL import java.lang.reflect.Field; public class GenerateSQL { public static void ...

  10. 在linux中查看进程占用的端口号

    在Linux 上的 /etc/services 文件可以查看到更多关于保留端口的信息. 可以使用以下六种方法查看端口信息. ss:可以用于转储套接字统计信息. netstat:可以显示打开的套接字列表 ...