- 浏览: 1776574 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (641)
- vb2005xu自己动手系列 (174)
- vb2005xu开发文章转摘 (47)
- vb2005xu发发牢骚 (99)
- vb2005xu新技术灌水 (12)
- vb2005xu网络资源集锦 (21)
- vb2005xu软件学习 (60)
- 英语学习 (3)
- JavaScript 学习 (54)
- JAVA OOP 巩固 之 CustomDatabase 的开发 (5)
- 2013年9月之前所在公司 记事 (7)
- FleaPHP/QEEPHP 资料 (87)
- JAVA MAIL 学习篇 (4)
- Python turbogears (5)
- Rails 个人开发四部曲 (3)
- 名人传 (8)
- iwp framework (5)
- 高考零分作文 (5)
- startos (8)
- lua (0)
- 职场 (1)
最新评论
-
hellotieye:
自己 评论 自己 挺嗨呀
Mysql sql查询时 if 的用法 -
igevin:
转载请标明出处,转自Gevin的博客http://blog.i ...
RESTful API 编写指南 -
Theobob:
...
实现简单的ACL -
vb2005xu:
比如 对于 curl 调用就不再需要 加各种if 判断了,
$ ...
搞一个简单的数据打印工具AsDebug の Laravel -
vb2005xu:
http://geekplux.com/wiki/
YII2 模块内自定义错误页
转载: http://blog.csdn.net/yuxuanji/archive/2009/04/13/4069732.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="JqueryAjaxLongPoll.aspx.cs" Inherits="JqueryAjaxLongPoll" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>无标题页</title> <script type="text/javascript" src="script/jquery-1.2.6.js"></script> <script type="text/javascript"> $(document).ready(function(){ $("#Button1").bind("click",{btn:$("#Button1")},function(evdata){ $.ajax({ type:"POST", url:"JqueryAjaxLongPoll.aspx", dataType:"json", timeout:10000, data:{ajax:"1",time:"10000"}, success:function(data,textStatus){ //alert("ok!"); evdata.data.btn.click(); }, complete:function(XMLHttpRequest,textStatus){ if(XMLHttpRequest.readyState=="4"){ alert(XMLHttpRequest.responseText); } }, error: function(XMLHttpRequest,textStatus,errorThrown){ //$("#ajaxMessage").text($(this).text()+" out!") alert("error:"+textStatus); if(textStatus=="timeout") evdata.data.btn.click(); } }); }); /*$("#ajaxMessage").ajaxStart(function(){ $(this).text("准备建立请求.readyState0:"); }); $("#ajaxMessage").ajaxSend(function(evt, request, settings){ $(this).text("开始请求,准备发送数据.readyState1:"+request.readyState); }); $("#ajaxMessage").ajaxComplete(function(event,request, settings){ if(request.status==200) $(this).text("请求完成.readyState4:"+request.readyState); }); $("#ajaxMessage").ajaxStop(function(){ $(this).text("请求结束."); });*/ }); </script> </head> <body> <form id="form1" runat="server"> <div> <input id="Button1" type="button" value="AjaxLongPoll" /> <label id="ajaxMessage"></label> </div> </form> </body> </html> using System; using System.Data; using System.Configuration; using System.Collections; using System.Web; using System.Web.Security; using System.Web.UI; using System.Web.UI.WebControls; using System.Web.UI.WebControls.WebParts; using System.Web.UI.HtmlControls; using System.Threading; public partial class JqueryAjaxLongPoll : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { if (Request.Form["ajax"] == "1") { //Response.End(); int time = Convert.ToInt32(Request.Form["time"]); DateTime date1 = DateTime.Now.AddMilliseconds((double)time); bool ready = false; while (Response.IsClientConnected) { Thread.Sleep(3000); if (DateTime.Compare(date1, DateTime.Now) < 0) { Response.End(); break; } //ready = true; if (ready) { Response.Write("SetValue('" + DateTime.Now.ToString() + "')"); //Response.Flush(); Response.End(); break; } else { } } } else { if (!Page.IsPostBack) { } } } }
写道
思路:
利用jquery,很方便的就能实现ajax,上面设置了ajax的timeout时间,由于设置了timeout将会造成不能保持长连接,到了时间ajax自动会报“超时”的错误,也就是会调用error方法,此时textStatus=="timeout",timeout后重新进行ajax请求。服务器接受ajax请求的时候,会接收一个超时时间的值,超时的情况下服务器端的处理也立即停止。当客户端成功获取返回结果时,也会立即进行新的ajax请求,如此循环。
为什么要设置客户端的ajax超时值呢?因为服务器为了保持请求(阻塞请求),必须有一个无限循环,循环的结束条件就是获取到了返回结果,如果客户端关闭了(客户端浏览器的关闭不会发消息给服务器),服务器无法知道客户端已经关了,这个请求没必要处理下去了。最终会造成资源过度浪费,只要用一个折中的办法,限制超时时间。
可以不必设置客户端ajax的超时时间,但进行请求的时候传递一个超时值给服务器,服务器在处理的时候,如果超时时间到了的话,还没有客户端需要的结果,这时传递一个超时信息给客户端,客户端接收到了此信息,根据情况重新进行ajax请求。XMLHttpRequest没有超时的参数,Jquery用window.setTimeout自己封装的(到了定时时间运行超时处理方法,和XMLHttpRequest结束方法)。可以根据这个思路来改变一下,IBM上介绍的LONG POLL好像也是这样的。
利用jquery,很方便的就能实现ajax,上面设置了ajax的timeout时间,由于设置了timeout将会造成不能保持长连接,到了时间ajax自动会报“超时”的错误,也就是会调用error方法,此时textStatus=="timeout",timeout后重新进行ajax请求。服务器接受ajax请求的时候,会接收一个超时时间的值,超时的情况下服务器端的处理也立即停止。当客户端成功获取返回结果时,也会立即进行新的ajax请求,如此循环。
为什么要设置客户端的ajax超时值呢?因为服务器为了保持请求(阻塞请求),必须有一个无限循环,循环的结束条件就是获取到了返回结果,如果客户端关闭了(客户端浏览器的关闭不会发消息给服务器),服务器无法知道客户端已经关了,这个请求没必要处理下去了。最终会造成资源过度浪费,只要用一个折中的办法,限制超时时间。
可以不必设置客户端ajax的超时时间,但进行请求的时候传递一个超时值给服务器,服务器在处理的时候,如果超时时间到了的话,还没有客户端需要的结果,这时传递一个超时信息给客户端,客户端接收到了此信息,根据情况重新进行ajax请求。XMLHttpRequest没有超时的参数,Jquery用window.setTimeout自己封装的(到了定时时间运行超时处理方法,和XMLHttpRequest结束方法)。可以根据这个思路来改变一下,IBM上介绍的LONG POLL好像也是这样的。
$(document).ready(function(){ $("#Button1").bind("click",{btn:$("#Button1")},function(evdata){ $.ajax({ type:"POST", url:"JqueryAjaxLongPoll.aspx", dataType:"json", data:{ajax:"1",time:"6000000"}, success:function(data,textStatus){ //成功 if(data.success=="1"){ //客户端处理 //... ///重新请求 evdata.data.btn.click(); } //超时 if(data.success=="0"){ evdata.data.btn.click(); } }, complete:function(XMLHttpRequest,textStatus){ if(XMLHttpRequest.readyState=="4"){ alert(XMLHttpRequest.responseText); } }, error: function(XMLHttpRequest,textStatus,errorThrown){ //$("#ajaxMessage").text($(this).text()+" out!") // alert("error:"+textStatus); // if(textStatus=="timeout") evdata.data.btn.click(); } }); }); 后台代码变更后: if (Request.Form["ajax"] == "1") { int time = Convert.ToInt32(Request.Form["time"]); DateTime date1 = DateTime.Now.AddMilliseconds((double)time); bool ready = false; while (Response.IsClientConnected) { Thread.Sleep(3000); if (DateTime.Compare(date1, DateTime.Now) < 0) { Response.Write("{success:'0'}"); Response.End(); break; } //此处进行请求处理,有结果了置ready = true //ready = true; if (ready) { Response.Write("{success:'1'}"); Response.End(); break; } } } else { if (!Page.IsPostBack) { } } 上面的方法应该就可以满足要求了,具体的超时时间可以根据情况来设置。这也是我根据IBM上介绍的“server push”思路,来实现了其中的一种,也不知道有没有问题,还请大家多多赐教。
发表评论
-
RESTful API 编写指南
2016-06-14 11:12 5175基于一些不错的RESTful ... -
谈冷热数据
2015-07-20 11:13 6153http://jishu.zol.com.cn/11379. ... -
贺岁文:部门正副经理之争
2015-01-29 11:57 1175http://blog.csdn.net/shenyisyn ... -
只能通过chrome网上应用商店安装该程序”的解决方法
2014-10-09 13:09 6139自 Chrome 21.x 开始默认只允许从 Chrome ... -
nginx同一iP多域名配置方法
2014-06-03 13:48 2685nginx绑定多个域名可又把多个域名规则写一个配置文件里,也 ... -
风车网陈晓峰回忆录:我的两个月倒闭史
2014-05-27 16:09 1334http://tech2ipo.com/54719 ... -
Debugging and Profiling PHP with Xdebug
2014-04-15 12:10 1731http://www.sitepoint.com/debug ... -
XHProf 中文文档
2014-04-15 11:26 1455XHProf文件(草稿) 翻译:徐 ... -
让普通用户登录phpmyadmin不显示information_schema
2014-02-13 16:54 1909http://www.cnblogs.com/faily20 ... -
apache2.2+svn1.6+TortoiseSVN在windows环境搭建
2013-12-21 21:58 4462今天空闲时间对SVN服务器端和客户端环境做了搭建,并且成功了 ... -
MiniCMS - 吐槽
2013-10-22 10:58 1438看到的深有感触, ... -
MySQL 数据库通过日志恢复
2013-08-14 17:09 1083http://blog.csdn.net/hanxin198 ... -
使用文件函数操作Memcache
2013-08-12 18:21 1518写道 最近一周,SAE又悄悄的上线了一个新功能.那就是开始 ... -
转 总结过去10年
2013-08-10 11:17 1117下面的好文 担心原作者删帖 转到此处吧 http:/ ... -
SAET SQL_CALC_FOUND_ROWS 问题
2013-07-20 14:22 2301上午遇到 应用数据查不到的问题,但是 数据库中明明 ... -
问一下使用struts的同学们,你们这些年,是怎么过来的?
2013-07-20 12:04 1364by 空虚浪子心 http://www.inbreak.ne ... -
杂谈产品灰度上线的研发模式
2013-05-13 13:45 1753写道 传统的产品研发 ... -
正则表达式口诀
2013-04-12 14:38 1458写道 来源:蓝血正则 ... -
Emacs 快速指南
2013-04-09 17:51 2323您正在阅读 Emacs 快速指南(Emacs tutorial ... -
推荐几个技术博客,持续更新中...
2013-03-18 10:07 3300推荐几个技术博客,我整理了一下googlereader的订 ...
相关推荐
前端+jQuery+实现烟花特效前端+jQuery+实现烟花特效前端+jQuery+实现烟花特效前端+jQuery+实现烟花特效前端+jQuery+实现烟花特效前端+jQuery+实现烟花特效前端+jQuery+实现烟花特效前端+jQuery+实现烟花特效前端+...
7. **Demo实现**:压缩包中的`websocket.demo.js`文件很可能是包含示例代码的脚本,展示了如何使用JQuery与WebSocket进行交互,包括建立连接、发送消息、接收响应和关闭连接的过程。通过分析和运行这个示例,你可以...
本篇文章将详细讲解如何利用这两个工具实现拖拽连接模型,并探讨其背后的原理和技术要点。 首先,jQuery-UI是jQuery的一个扩展库,提供了丰富的UI组件,如日期选择器、滑块、对话框等。它基于jQuery核心库,简化了...
"利用Ajax+Jquery实现异步进度条效果"这个主题正是围绕这一目标展开,它涉及到C#后端开发、.NET框架、Ajax技术以及Jquery库的前端应用。下面将详细阐述这些知识点。 首先,C#是一种面向对象的编程语言,广泛应用于...
利用Jquery实现的RSS阅读器 最近一直都在学习jquery,自己写了一个很简单的rss阅读器,很简单! 说一下我的思路: 由于安全问题,浏览器没有足够的权限来操作远程的xml,所以不得不借助服务器端来实现,所以提供了...
本项目“利用JQuery实现网页左侧树形菜单”旨在通过JQuery库,结合CSS样式和可能的Java后端技术,动态地从数据库获取数据,构建出这种交互式的菜单结构。下面我们将详细探讨实现这一功能所需的知识点。 首先,我们...
用jquery实现table拖拽列功能,可动态改变表格列宽度,并且实现table表格100%的问题,如果列缩小,则自动拉伸最后一列以实现table100%的效果,如果拉伸长度比原长度大,则显示x滚动条。
本篇文章将详细讲解如何利用jQuery来实现一个公司组织结构图,帮助你理解并掌握这一实用技能。 首先,组织结构图是展示公司内部层次关系和员工职责的有效工具。在网页上实现这样的图,可以使用jQuery与其他前端技术...
以JQuery实现内容编辑为主体,顺带使用了alertfly,alertjs和font-awesom 4.3版本。很多JQuery实战可参考博客http://blog.csdn.net/qq_19558705/article/details/49851879
对于连接虚线,我们可以利用CSS伪元素和绝对定位来实现,每个节点的连接线可以通过设置虚线边框和适当的宽度来绘制。 ```html 父节点1 子节点1 子节点2 <!-- 子节点2的子节点结构 --> ...
Demo 用jQuery实现最简单的滚屏效果2(加了上下按钮 Demo 用jQuery实现最简单的滚屏效果2(加了上下按钮 Demo 用jQuery实现最简单的滚屏效果2(加了上下按钮 Demo 用jQuery实现最简单的滚屏效果2(加了上下按钮 Demo 用...
利用jQuery实现的简单幻灯片逻辑,兼容性强,代码简练
在这个“Jquery实现数据左右移动Demo”中,我们将深入探讨如何利用jQuery来实现动态的数据展示,特别是在一个可能需要数据左右移动的场景,如轮播图或卡片式布局。 首先,我们需要理解jQuery的基本用法。jQuery通过...
利用jquery实现表格动态分页。前台用jquery实现;后台用java实现动态查询数据、分页。 表格数据的总记录数,每页条数,总页数,上/下一页,首页,末页等基本功能元素都有相应的函数实现,可作为基本分页功能的学习...
Jquery各种连接操作 Ajax JqueryJquery各种连接操作 Ajax Jquery
在本示例中,我们将探讨如何使用Spring MVC框架与jQuery库结合实现Ajax功能。Spring MVC是Spring框架的一部分,专门用于构建Web应用程序,而jQuery则是一个强大的JavaScript库,简化了DOM操作、事件处理以及异步HTTP...
本项目“Jquery实现城市选择”旨在利用jQuery创建一个美观且交互性强的城市选择功能,为用户提供友好的界面体验。 一、jQuery基础 jQuery的核心特性是其选择器功能,它允许开发者通过CSS样式选择器快速定位到页面上...
在这个场景中,我们将关注使用Jquery来实现这一功能。 Jquery是一个高效、简洁且功能丰富的JavaScript库,它极大地简化了JavaScript的DOM操作,使得开发者可以轻松地实现各种复杂的交互效果。对于分页功能,Jquery...