反向Ajax扫盲贴(1)
先试着开一帖吧 自己总结了一下 废话少说 开场白省去(不喜欢 有种给人装X的感觉 我还是低调点) 我直接说知识点 ajax不用说了 异步的JavaScript和XML 常用的数据 json 与JavaScript语法很接近,且消耗更少带宽 这个自不必细解释 如下代码Ajax请求通过某个地方的邮政编码来检索该地的名称
程序代码:
var url ='http://www.' + $('#postalCode').val() +'&country=' + $('#country').val() +'&callback=?'; $.getJSON(url, function(data) { $('#placeName').val(data.postalcodes[0].placeName); });
那反向Ajax通信技术 又是什么呢 我简单的说让大家明白 就是能够从服务器端向客户端发送数据 服务器就可以尽可能快地向客户端发送事件也就是低延迟通信 (一般都这么叫吧)。
那么反向Ajax方式都包括哪几种呢 1 轮询 2 Comet(不懂直接理解为 服务器推)3PiggyBack(什么是PiggyBack 三两句话说不完 下下贴再说吧)
1 轮询
假设有个未使用AJAX的Web页面 使用<meta>刷新标签,每隔数秒就更新这个页面 这就是所说的轮询 客户端定时轮询服务器,看是否存在更新,并且显示服务器传回的当前信息 在网页上 使用一些简单的JavaScript代码以持续地更新页面,就可以实现相同的事情。确实,能够从表面实现所谓的推送,这就是轮询技术
轮询技术是两种主动式反向Ajax方法的一种 客户端在每个时间周期内向服务器发送请求 看看服务器端有没有数据更新 如果有,就向服务器请求数据
上面的都是轮询的解释 这个大家一看就懂 就这
程序代码:
<mce:script type="text/javascript"><!-- 69. function getData() {//获取留言数据 70. var temp = ""; 71. $.getJSON("Data.aspx", { ID: "2", time: new Date() }, function (json) {//利用ajax返回json的方式 72. if (json.length > 0) {//返回有数据 73. $("#news").html(" <font color='Red'>有新消息:</font>"); 74. for (var i = 0; i < json.length; i++) {//循环json,生成需要的标签 75. temp += "<li id='" + json[i].ID + "' ><img src="../img/t.gif" mce_src="img/t.gif" style='height: 14px; width: 14px' /><a href="#" mce_href="#" onclick='getHref(" + json[i].ID + "); return false;' >" + json[i].SendID + "给您留言了</a></li>"; 76. } 77. $("#info li").remove(); //移除之前的元素li 78. $("#info").append(temp); //追加新的 79. $("li").hide(); //隐藏全部,只显示前2条 80. $("li:eq(0)").show(); 81. $("li:eq(1)").show(); 82. } 83. else { 84. $("#news").html(" <font color='#999'>无新消息:</font>"); //无数据时的提示 85. } 86. }) 87. }; 88. $(function () {//间隔3s自动加载一次 89. getData(); //首次立即加载 90. window.setInterval(getData, 3000); //循环执行!! 91. } 92. ); 93. function getHref(id) {//重定向页面并且移除当前li标签 94. location.href = 'ShowAndRe.aspx?ID=' + id; 95. $(document.getElementById(id)).remove(); 96. } 97. 98.// --></mce:script> 99.</head>种方式我举一个例子
消息盒子 这种就是常用的AJAX轮询方式
当然轮询好坏呢 完全取决于个人怎么用 有的人说好有的人说不好
我举个例子
假如客户端每10秒进行一次请求,客户端数量少的时候没关系,如果数量多的话,那么每10秒就有这么多用户进行请求,每个请求都要连接数据库,是不是耗费资源太大,性能太低?
用户打开多个页面,每个页面都进行Ajax长轮训的话,服务器就要处理用户数量*N的请求,这样耗费资源更大 ???
轮询如何优化???
其实如果优化的话呢 一般是加大轮询时间,另外对服务器端的程序进行优化,比如用户有新消息的用户id放在内存里面缓存,而不是每次都读取数据库 另外在结合缓存呢 效果更好一些
现在轮询主要用法嗯 是长轮询
长轮询:客户端向服务器发送Ajax请求,服务器接到请求后hold住连接,直到有新消息才返回响应信息并关闭连接,客户端处理完响应信息后再向服务器发送新的请求。
优点:在无消息的情况下不会频繁的请求。
缺点:服务器hold连接会消耗资源。
我举个例子给大家看看什么是长轮询
[ 本帖最后由 wangnannan 于 2015-5-27 11:08 编辑 ]