我在Page_Load上连接启动脚本JavaScript函数,如下所示:

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

此函数调用几个不同的函数来设置页面。这些功能之一检查document.readyState并确保它是"complete"。这涉及图像,我想确保所有内容都已完全渲染。
if (document.readyState == "complete") {

一切正常,直到我需要将字节数组写入输出流为止(使用Response.BinaryWriteResponse.OutputStream.Write()将文件提供给用户。此后,document.readyState始终是“交互式的”,直到我离开页面并返回。如果setTimeout(myFunction, 1000);不完整,我什至使用了document.readyState调用来递归地调用该函数,直到它完成为止。

我已经研究了一段时间,无法弄清楚这种现象。关于这是怎么回事的任何想法?

最佳答案

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

如果您查看代码,则可能没有调用Response。在BinaryWrite或WriteToStream方法之后结束。为了刷新响应并警告客户端所有内容已转移,这是必需的。

请注意,在进行Response.End调用之后,您仍然可以处理数据服务器端,只是无法再将任何数据发送到客户端。

A. Russell Jones(google preview here)的C#精通ASP.Net的第171页是如何正确执行此操作的一个很好的示例。

最重要的是,您应该创建流,将其读入Byte Array,关闭流,然后执行BinaryWrite,最后调用Response.End。

关于c# - document.readyState == "complete"始终为false。状态始终为 "interactive",我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/1208381/

10-11 11:50