AJAX 导入数据时如何实时显示真实的进度?

yangshuquan 2011-05-11 04:16:33
最近碰到一个问题,用Jquery中的Ajax向数据库导入数据,由于数据量比较大,比较慢,页面好像死了一样,用户体验很不好,于是想向用户显示一个进度,我的思路是这样子:
写两个AJAX函数,第一个用于导入数据,同时将进度信息写到Session中,第二个每隔一秒种获取Session进度信息

function datasave(){
//调用getproess函数
getproess()

//导入数据
$.ajax({
........
});
}

function getproess(){
//获取进度信息
$.ajax({
........
});

//每隔1秒运行一次
setTimeout(getproess,1000);
}

但问题是getproess函数无法获取到Session的值,真是奇怪了,不知道哪里出了问题了,请大家指教!
...全文
2186 52 打赏 收藏 转发到动态 举报
写回复
用AI写文章
52 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
每当你访问一个页面,asp.net会为页面创建一个session集合,并把系统中属于当前会话的信息复制到这个集合中。当你在页面中为session集合增加值,此时并没有增加到asp.net系统中。
  • 打赏
  • 举报
回复
第一个页面如果不执行完,页面的session集合的值不会复制到asp.net系统为会话而保存的session集合中的。

你可以考虑使用Cache来传送临时数据。
xingdongfang 2011-06-26
  • 打赏
  • 举报
回复
我用过ASP.NET AJAX,我知道,如果在服务端要启用SESSION的话,必须有一个webmethod(enablesession=true)](我没有区别大小写),如果你没有用这个attribute,你的session是没有效的。

不知道你的服务端是使用什么技术的。如果是ASP.NET AJAX,不妨用这个试试。
  • 打赏
  • 举报
回复
IE浏览器的一个常识:一个页面通常只允许有两个线程,再多的请求就要排队等待了。

你可以试试其它浏览器(许多所谓“快捷”的浏览器是靠一下子启动一大堆线程而显得比IE快的),如果测试出来如此,就知道有些所谓的“解决方法”其实是一条思路了。
wang2392219 2011-05-14
  • 打赏
  • 举报
回复
zftow110 2011-05-14
  • 打赏
  • 举报
回复
写入TEXT文件,AJAX去读取这个文件获取最新进度,我的群生成这么做的。不过开文件夹读写权限
xingdongfang 2011-05-14
  • 打赏
  • 举报
回复
另外,如果想用进度条的话,也可以基于上面的思路来实现
this.Response.Write("<script lanaguage=javascript>callprocess(" + ((++index / total records)</script>");
this.Response.Flush();
xingdongfang 2011-05-14
  • 打赏
  • 举报
回复
我做过这样的例子。

不使用AJAX

先把数据加载进来这后,在aspx.cx里面写上:

this.Response.Bluffer=true;
this.Reponse.Clear();
//...在这里处理你的导入数据的代码,一定是一个foreach的循环

var index = 0;
foreach(var x inxxx)
{
//..asdfadf
this.Response.Write("我现在的是进度是XXXX,处理了第" + ((++)index).ToString());
this.Response.Flush();
}
showjim 2011-05-14
  • 打赏
  • 举报
回复
你的数据如果是一次性提交的话,数据传送完后才会运行到Page_Load,所以普通的方法是没用的。
一种方法是分次提交,进度精确度与次数相关。
一种方法是重写IHttpModule或IHttpHandle,自己处理接收Http流并记录状态。
O溺水的鱼0 2011-05-14
  • 打赏
  • 举报
回复
只要你存入都了session中,那么这个值在session失效之前肯定是可以获取到的。如果获取不到值,那么你可以把两个sessionId打印出来看看,看看是否是同一个session对象。
dengzhiwen2009 2011-05-14
  • 打赏
  • 举报
回复
用AjaxPro做,在后台直接获取Session或Cookie,返回需要的数据,页面上用JS调用后台方法,利用返回值制作真实进度条
ricksyz 2011-05-13
  • 打赏
  • 举报
回复
ajax是异步的,写入session的操作可能都还没有执行到,你读取session的ajax就读不到了
无影的灵魂 2011-05-13
  • 打赏
  • 举报
回复
曾用ASP+ajax弄过上传文件的进度条,楼主不要用SESSION,用APPLICATION吧,给每次上传手工设置唯一编码,然后定时取,很好解决。。上传完及时释放,性能同样OkK
wu8461113 2011-05-13
  • 打赏
  • 举报
回复
难道非要用 setTimeout,我上次用这个,在执行过程中,如果叠加了在setTimeout中执行的语句
,会出现冲突,你明显是在没读取进度条的时候就执行了下一段,建议把读取时间改变一下,这仅仅
是我的猜测。祝你成功.
笑道江湖情 2011-05-13
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 wxr0323 的回复:]
引用 17 楼 yangshuquan 的回复:

to wxr0323(子夜):
感觉你的这个思路挺复杂的,而且要调用到微软AJAX的很多JS文件,很耗时间

真实的进度条。

要么就整个假的算了。。哈哈
[/Quote]
如果不是特别长时间的话,弄个假的也没什么关系。
whowhen21 2011-05-13
  • 打赏
  • 举报
回复
[Quote=引用 33 楼 zsy619 的回复:]
很简单的办法:
HideProgress(); //显示进度
$.post("Handler/ExportLoan.ashx",
{
ConfigName: ConfigName,
Random: GetRandomNum()
}, function (data) {
HideProgress(); //隐藏进度

});
[/Quote]
方法都是这样写的,但是,如果那个导入数据很长时间,这个是不会有回应的,一直等到导入结束。调试下就知道了
我爱程序 2011-05-13
  • 打赏
  • 举报
回复
很简单的办法:
HideProgress(); //显示进度
$.post("Handler/ExportLoan.ashx",
{
ConfigName: ConfigName,
Random: GetRandomNum()
}, function (data) {
HideProgress(); //隐藏进度

});
  • 打赏
  • 举报
回复
UpdateProgress
coder_s 2011-05-13
  • 打赏
  • 举报
回复
用 JUI 的 progressbar 可满足你的需求。
huolei11 2011-05-13
  • 打赏
  • 举报
回复
两个线程,一个插数据,一个控制这个线程。
加载更多回复(25)
上层应用业务对数据的需求,主要包含两部分内容:1、 整体数据分析。2、 AB实验效果的监控。这几部分数据需求,都需要进行的下钻分析支持,我们希望能够建立统一的OLAP数据仓库,并提供一套安全、可靠的、灵活的数据服务。目前每日新增的曝光日志达到几亿条记录,再细拆到AB实验更细维度数据量则多达上百亿记录,多维数据组合下的聚合查询要求秒级响应间,这样的数据量也给团队带来了不小的挑战。OLAP层的技术选型,需要满足以下几点:1:数据延迟在分钟级,查询响应间在秒级2:标准SQL交互引擎,降低使用成本3:支持join操作,方便维度增加属性信息4:流量数据可以近似去重,但订单行要精准去重5:高吞吐,每分钟数据量在千W级记录,每天数百亿条新增记录6:前端业务较多,查询并发度不能太低通过对比开源的几款OLAP引擎,可以发现Doris和ClickHouse能够满足上面的需求,但是ClickHouse的并发度太低是个潜在的风险,而且ClickHouse的数据导入没有事务支持,无法实现exactly once语义,对标准SQL的支持也是有限的。所以针对以上需求Doris完全能解决我们的问题,DorisDB是一个性能非常高的分布式、面向交互式查询的分布式数据库,非常的强大,随着互联网发展,数据量会越来越大,查询需求也会要求越来越高,DorisDB人才需求也会越来越大,越早掌握DorisDB,以后就会有更大的机遇。本课程基于真实热门的互联网电商业务场景为案例讲解,具体分析指标包含:AB版本分析,下砖分析,营销分析,订单分析,终端分析等,能承载海量数据分析,数据分析涵盖全端(PC、移动、小程序)应用。整个课程,会带大家实践一个完整系统,大家可以根据自己的公司业务修改,既可以用到项目中去,价值是非常高的。本课程包含的技术:开发工具为:IDEA、WebStormFlink1.9.0DorisDBHadoop2.7.5Hbase2.2.6Kafka2.1.0Hive2.2.0HDFS、MapReduceFlume、ZookeeperBinlog、Canal、MySQLSpringBoot2.0.8.RELEASESpringCloud Finchley.SR2Vue.js、Nodejs、Highcharts、ElementUILinux Shell编程等课程亮点:1.与企业接轨、真实工业界产品2.DorisDB高性能分布式数据库3.大数据热门技术Flink4.支持ABtest版本监控分析5.支持下砖分析6.数据分析涵盖全端(PC、移动、小程序)应用7.主流微服务后端系统8.天级别与小级别多间方位分析9.数据同步解决方案10.涵盖主流前端技术VUE+jQuery+Ajax+NodeJS+ElementUI11.集成SpringCloud实现统一整合方案12.互联网大数据企业热门技术栈13.支持海量数据分析14.支持全端数据分析15.全程代码实操,提供全部代码和资料16.提供答疑和提供企业技术方案咨询企业一线架构师讲授,代码在老师的指导下企业可以复用,提供企业解决方案。  版权归作者所有,盗版将进行法律维权。 

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧