我有一个Web应用程序,我正在进行AJAX调用以获取一些数据。数据可以从100 Kb到1 Mbs不等。此外,这个调用需要花费很多时间,因为我需要在后端进行大量处理。
我遇到了两个基本问题:
1)这需要花费很多时间,因此我需要向最终用户展示AJAX调用的一些状态,这样他们就不会感到沮丧。我想是否有办法在一段时间后进行AJAX调用以检查初始AJAX调用的进度,或者可能是你可以建议的东西?
2)当收到数据时,有时甚至会挂起浏览器标签一两分钟,因为我正在通过JavaScript绘制页面。是否有办法停止或缩短停机时间?
任何建议都会有所帮助。感谢。
答案 0 :(得分:1)
AJAX在客户端提供状态事件,但是在你的情况下,我不认为这会保持良好,因为你想将进度发送给最终用户,我宁愿建议你通过做一个ajax来欺骗它使用iframe进行调用,该iframe将不断刷新从服务器到客户端的进度。
如果数据很大并且您开始绘画显然您的浏览器将挂起,我建议您优化您的绘制机制以使用setTimeout / setInterval,如果您按照步骤1,您可以开始使用从服务器刷新数据而不等待完整数据直到结束
编辑 - 如何通过iframe显示进度
假设您拥有main.aspx,其中包含您的全部内容并执行ajax调用
您还有一个info.aspx,可以从服务器获取数据。
您的info.aspx包含6个步骤,您希望通知用户每一步。
//Step 1 - do some thing
Response.Write("<script>progress = '10'; progressText = 'Completed step 1'; ");
Response.Write(" updateProgress(); </script>");
Response.Flush();
//Step 2 - do some thing
Response.Write("<script>progress = '30'; progressText = 'Completed step 2'; ");
Response.Write(" updateProgress(); </script>");
Response.Flush();
在上面的例子中我们正在更新进度和progressText变量并调用updateProgress()
javascript,updateProgress看起来像
function updateProgress()
{
//update parent window/container on the progress which will show an visual indicator of the progress
}
updateProgress()函数在开头刷新
答案 1 :(得分:0)
好的,我找到了一条路。我能够在不实际绘制任何iFrame的情况下检查进度。我只是创建了一个会话变量,并继续在服务器端更新它的值。我设置了一个超时函数来触发每一秒,并通过进行AJAX调用来检查会话变量的值。我知道它在服务器上创建了一些额外的负载,但我现在还不知道其他任何方式。欢迎提出更多建议。