gpt4 book ai didi

c# - document.readyState == "complete"始终为假。状态始终为 "interactive"

转载 作者:数据小太阳 更新时间:2023-10-29 05:56:30 33 4
gpt4 key购买 nike

我在 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,服务器端必须终止连接。

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

请注意,在调用 Response.End 之后,您仍然可以在服务器端处理数据,只是不能再向客户端发送任何数据。

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

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

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

33 4 0