0

我有一个 Web 应用程序,我正在其中进行 AJAX 调用以获取一些数据。数据可以从 100 Kb 到 1 Mbs 不等。此外,这个调用需要很多时间,因为我需要在后端进行大量处理。

我遇到了两个基本问题:

1)这需要很多时间,所以我需要向最终用户显示 AJAX 调用的一些状态,以免他们感到沮丧。我在想是否有办法在一段时间后进行 AJAX 调用以检查初始 AJAX 调用的进度,或者您可以建议什么?

2)收到数据后,有时它甚至会挂起浏览器选项卡一两分钟,因为我正在通过 JavaScript 绘制页面。有没有办法停止或减少这种悬挂时间?

任何建议都会非常有帮助。谢谢。

4

2 回答 2

1
  1. AJAX 在客户端提供状态事件,但是在您的情况下,我认为这不会很好,因为您想将进度发送给最终用户,我宁愿建议您通过使用 iframe 进行 ajax 调用来欺骗它,这将不断刷新从服务器到客户端的进度。

  2. 如果数据很大并且您开始绘制很明显您的浏览器将挂起,我建议您改进绘制机制以使用 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();

在上述情况下,我们正在更新 progress 和 progressText 变量并调用updateProgress()javascript,updateProgress 看起来像

function updateProgress()
{
    //update parent window/container on the progress which will show an visual indicator of the progress
}

updateProgress() 函数在开始时被刷新

于 2012-10-09T07:20:14.237 回答
0

好吧,我有办法了。我能够在不实际绘制任何 iFrame 的情况下检查进度。我只是创建了一个会话变量并继续在服务器端更新它的值。我设置了一个超时函数以每秒触发一次,并通过 AJAX 调用检查会话变量的值。我知道它在服务器上产生了一些额外的负载,但我现在不知道任何其他方式。欢迎任何更多建议。

于 2012-10-09T12:34:23.437 回答