Beacons

这项技术非常类似动态脚本注入。使用Javascript创建一个新的Image对象,并把src属性设置为服务器上脚本的URL。该URL包含了我们要通过GET传回的键值对数据。请注意并没有创建Img元素或把它插入dom

var url = '/status_tracker.php';
var params = ['step=2','time=12345544'];
(new Image()).src = url + "?" + params.join('&');

服务器会接收到数据并保存下来,它无需向客户端发送任何回馈信息,因此没有图片会实际显示出来。这是给服务器回传信息最有效的方式。它的性能消耗很小,而且服务器的错误完全不会影响到客户端。

图片信标很简单,但也意味着它能做的事情是有限的。你无法发送POST数据,而URL的长度有最大值,所以你可以发送的数据的长度被限制得相当小。你可以接收服务器返回的数据,但只局限于非常小的几种方式。一种是监听Image对象的load事件,它会告诉你服务器是否成功接收数据。你还可以检查服务器返回的图片的宽度和高度(如果返回的是图片的话)并使用这些数字通知你服务器的状态。举个例子,宽度为1表示“成功”,为2表示“失败”。

如果你不需要再响应中返回数据,就应该发送一个不带消息正文的204 No Content状态码,它将阻止客户端继续等待永远不会到来的消息正文:

var url = '/status_tracker.php';
var params = ['step=2','time=12343434'];
var beacon = new Image();
beacon.src = url + ‘?’ + params.join('&');
beacon.onload = function(){
    if(this.width == 1){
       //成功
    }
    else if(this.width == 2){
       //失败,请重试并创建另一个信标
    }
};
beacon.onerror = function(){
   //出错,稍后重试并创建另一个信标
}

 

信标是向服务器回传数据最快且最有效的方式。服务器根本不需要发送任何响应正文,因此你也无须担心客户端下载数据。唯一的缺点是你能接收到的响应类型是有限的。如果你需要返回大量数据给客户端,那么请使用XHR。如果你只关心发送数据到服务器(可能需要极少的返回信息),那么请使用图片信标。

转载于:https://www.cnblogs.com/joyho/articles/3418809.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值