代码之家  ›  专栏  ›  技术社区  ›  Aaron Daniels

document.readyState==“complete”始终为false。国家总是“互动的”

  •  5
  • Aaron Daniels  · 技术社区  · 17 年前

    我在加载页面上连接了一个启动脚本JavaScript函数,如下所示:

    ScriptManager.RegisterStartupScript(Me, GetType(Page), "page_init", "page_init();", True)
    

    此函数调用两个不同的函数来设置页面。其中一个函数检查 document.readyState "complete" . 这是关于图像的,我想确保所有的东西都被完全渲染了。

    if (document.readyState == "complete") {
    

    一切正常,直到我需要将字节数组写入outputstream(使用 Response.BinaryWrite Response.OutputStream.Write() 将文件提供给用户。在那之后 document.readyState setTimeout(myFunction, 1000); 打电话询问 document.readyState 在函数完成之前递归调用该函数是不完整的。它永远不会达到“完整”。

    我自己已经研究了很长一段时间了,但我无法理解这种行为。你知道这是怎么发生的吗?

    4 回复  |  直到 17 年前
        1
  •  5
  •   ChrisLively    17 年前

    为了使ReadyState翻转完成,服务器端必须终止连接。

    如果查看代码,可能不是在调用Response.End,而是在BinaryWrite或WriteToStream方法之后。这是必需的,以便刷新响应并提醒客户端所有内容都已传输。

    请注意,在做出响应后,您仍然可以在服务器端处理数据。结束调用后,您将无法向客户端发送更多数据。

    如何正确地做到这一点的一个很好的例子是A.Russell Jones的《用C#掌握ASP.Net》第171页( google preview here

    关键是您应该创建流,将其读入字节数组,关闭流,然后执行二进制写入,最后调用Response.End。

        2
  •  5
  •   Aaron Daniels    17 年前

    可以找到更多信息 here

    (出人意料地)我投了赞成票 此处批准)有一个 触发的onreadystatechange事件 每当iFrame的readyState 属性更改。那是一个重新开始的国家 反映了下载在数据库中的位置 过程

    内联:最初设置src时 文件已完全下载, readyState更改为interactive。 其他浏览器是IE然后改变的 要完成的readyState属性 当页面(或应用程序)处于 已完全加载并准备好供用户使用。

    对于IE的内联情况, 但是 那没什么大不了的 感觉,因为用户必须手动 或者从某个应用程序打开它。

        3
  •  0
  •   ironsam    17 年前

    你打过电话吗 Response.Close() 代替或之前 Response.End() ? 在反射器中比较后,会发现两者是不同的。

        4
  •  0
  •   Niko    17 年前

    直接写入流时,应将内容长度http头设置为所发送二进制数据的正确大小。