我在Page_Load上连接启动脚本JavaScript函数,如下所示:
ScriptManager.RegisterStartupScript(Me, GetType(Page), "page_init", "page_init();", True)
此函数调用几个不同的函数来设置页面。这些功能之一检查
document.readyState
并确保它是"complete"
。这涉及图像,我想确保所有内容都已完全渲染。if (document.readyState == "complete") {
一切正常,直到我需要将字节数组写入输出流为止(使用
Response.BinaryWrite
或Response.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/