//原生ajax
var Ajax={
get: function(url, fn) {
// XMLHttpRequest对象用于在后台与服务器交换数据
var xhr = new XMLHttpRequest();
xhr.open('GET', url, true);
xhr.onreadystatechange = function() {
// readyState == 4说明请求已完成
if (xhr.readyState == 4 && xhr.status == 200 || xhr.status == 304) {
// 从服务器获得数据
fn.call(this, xhr.responseText);
}
};
xhr.send();
},
// datat应为'a=a1&b=b1'这种字符串格式,在jq里如果data为对象会自动将对象转成这种字符串格式
post: function (url, data, fn) {
var xhr = new XMLHttpRequest();
xhr.open("POST", url, true);
// 添加http头,发送信息至服务器时内容编码类型
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && (xhr.status == 200 || xhr.status == 304)) {
fn.call(this, xhr.responseText);
}
};
xhr.send(data);
}
}
短轮询:
每隔一段时间发送一次请求获取最新的数据。
长轮询:
发一次http请求给后台,后台接收到请求并不立即响应,直至数据发生变化。
再响应客户端,请求超时再次发送一个请求出去。
长链接:
socket通信
套接字
1.创建服务器,启动服务器
2.创建客户端,启动客户端
3.接收客户端的连接
4.客户端发送数据,服务端接收(二进制流的数据)
5.服务端发送数据,客户端接收
..........................................
6.服务器关闭,所有客户端连接失败。
7.客户端关闭,服务端连接的当前客户端失败。