我正在 Page_Load 上连接一个启动脚本 JavaScript 函数来触发,如下所示:
ScriptManager.RegisterStartupScript(Me, GetType(Page), "page_init", "page_init();", True)
该函数调用几个不同的函数来设置页面。这些功能之一检查document.readyState
并确保它是"complete"
。这涉及图像,我想确保所有内容都已完全渲染。
if (document.readyState == "complete") {
一切工作正常,直到我需要将字节数组写入输出流(使用Response.BinaryWrite
or Response.OutputStream.Write()
将文件提供给用户。之后,document.readyState
始终是“交互式”的,直到我离开页面并返回。我什至用过setTimeout(myFunction, 1000);
打电话如果document.readyState
在完成之前,递归调用该函数尚未完成。它永远不会达到“完成”。
我自己已经研究了很长一段时间,但无法弄清楚这种行为。关于这是如何发生的有什么想法吗?
为了使 ReadyState 转变为 Complete,服务器端必须终止连接。
如果您查看代码,您可能没有在 BinaryWrite 或 WriteToStream 方法之后调用 Response.End 。这是为了刷新响应并提醒客户端所有内容都已传输所必需的。
请注意,在进行 Response.End 调用后,您仍然可以在服务器端处理数据,只是无法向客户端发送更多数据。
关于如何正确执行此操作的一个很好的示例是 A. Russell Jones 所著的 Mastering ASP.Net with C# 第 171 页().
其核心是您应该创建流,将其读入字节数组,关闭流,然后执行 BinaryWrite,最后调用 Response.End。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)