Javascript 如何检查我的AJAX调用的状态?

Javascript 如何检查我的AJAX调用的状态?,javascript,html,ajax,Javascript,Html,Ajax,我有一个web应用程序,我在其中调用AJAX来获取一些数据。数据大小可以从100 Kb到1 MB不等。另外,这个电话需要很多时间,因为我需要在后端进行大量处理 我遇到了两个基本问题: 1) 这需要很多时间,所以我需要向最终用户展示AJAX调用的一些状态,这样他们就不会感到沮丧。我在想,是否有一种方法可以在间隔一段时间后进行AJAX调用,以检查初始AJAX调用的进度,或者您可以提出一些建议 2) 当收到数据时,它有时甚至会挂起浏览器选项卡一两分钟,因为我正在通过JavaScript绘制页面。有没有

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

我遇到了两个基本问题:

1) 这需要很多时间,所以我需要向最终用户展示AJAX调用的一些状态,这样他们就不会感到沮丧。我在想,是否有一种方法可以在间隔一段时间后进行AJAX调用,以检查初始AJAX调用的进度,或者您可以提出一些建议

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

任何建议都会很有帮助。谢谢

  • AJAX在客户端提供状态事件,但是在您的情况下,我认为这并不适用,因为您希望将进度发送给最终用户,我建议您通过使用iframe执行AJAX调用来欺骗它,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();
    

    updateProgress()函数在一开始就被刷新了

    好的,我找到了解决方法。我能够检查进度,而不必实际绘制任何iFrame。我只是创建了一个会话变量,并在服务器端不断更新它的值。我将超时函数设置为每秒触发一次,并通过进行AJAX调用来检查会话变量的值。我知道这会在服务器上增加一些额外的负载,但我现在不知道还有什么其他方法。欢迎提供更多建议。

    您能否提供一些示例,说明如何使用iframe刷新进度?我真的很需要一个通关。一个向上投票会有帮助的。。。不管怎么说,当您想加载一些信息而不是使用传统的ajax时,请尝试将其加载到网页中,这就是使用iframe需要做的事情。。。somewebpage.aspx,其中的.aspx文件或您使用的任何其他文件(php等)可以不断以json或javascript格式推送信息,您的代码可以在客户端选择这些信息。谢谢!如果解决方案对您有效,请告诉我,我可能会在服务器端进行修改,但更多的是在服务器端。因此,我的理解是,可能没有办法通知用户进度。这个iframe基本上有助于逐渐加载内容,这可能会阻止系统挂起。但它仍然不能解决我的全部问题。我会继续探索。谢谢。不是真的,iframe中的内容可以用来通知用户进度。。。让我编辑我的答案,以包含更多关于进度更新的详细信息
    function updateProgress()
    {
        //update parent window/container on the progress which will show an visual indicator of the progress
    }