仅刷新 Web 页面的部分内容






4.43/5 (4投票s)
2001年5月9日
3分钟阅读

225227

1568
一篇关于刷新 Web 页面上的对象而无需刷新整个页面的文章
背景
我需要只刷新网页的一部分,而不是刷新整个页面。每次我尝试时,它总是会刷新整个页面。我感到非常沮丧,然后我阅读了 CodeProject 上的一篇文章 (CodeProject 讨论区),并想与 Uwe Kein(作者)讨论这个问题。他的建议是使用远程脚本,从我读过的文章来看,这是一种可行的方法。不幸的是,我的公司没有在他们的开发或生产系统上安装它。我不能等待他们,所以我尝试了 scriptlets。经过大量的试验和错误,我让它工作了。我写这篇文章是为了帮助任何其他遇到这种情况的人。
这将为您做什么?
向您展示如何使用 scriptlet 内的计时器每秒刷新一次 scriptlet。 这个例子使用了一种无 DNS 连接(意味着您不必通过 ODBC 创建系统 DNS 条目)的方式来访问 MS-Access 数据库,但您可以通过更改 ConnectionString(请参阅下面的格式)来将其改编为任何其他数据库。
//Build the connection string // //ConnectionStringFormat(seebelow): //ConnectionString="DRIVER=SQLServer;SERVER=MySQLServer;CATALOG=MyDatabase;UID=USERID;PWD=Password"; // //forSQL7.0: //ConnectionString="DRIVER=SQLServer;SERVER=TopTen;CATALOG=TopTen;UID=TopTen;PWD=TopTen"; // //for Access Database (on Server): //ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;" &_ // "Data Source=\\\\SERVER\\Share\\directory\\TopTen.mdb"; // //for Access Database (on local drive): //ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;" &_ // "Data Source=C:\\Database\\TopTen.mdb";
我包含了一个名为/位于 C:\TopTen\TopTen.mdb 的 Access2000 数据库供示例使用,或者您可以使用文本文件 TopTen.txt,它将为 SQL 7.x 数据库创建一个表、用户登录、用户角色、主键并插入十行。
注意:如果您想使用 ASP (服务器调用) 代码,请将其编写为 "JavaScript" 函数,并在 <SCRIPT>
标记中使用 RUNAT=server
。
什么是 Scriptlets
Scriptlets 是大量利用 DHTML 对象模型的 HTML 页面。它就是这么简单...编写一个普通的 HTML 文件。为 scriptlet 创建一个名为 "CreatePage" 的函数。 现在,创建一个名为 public_description 的 "新" 对象,并将其赋值为函数的结果。 此函数充当 scriptlet 对象的构造函数。 从某种意义上说,public_description 变量就像 C++ 类的头文件。 它定义了 scriptlet 公开的所有属性和方法。 请参阅下面的示例
// declare the object interface (constructor) public_description = new CreatePage(); var InScriptlet = (typeof(window.external.version) == "string"); // set some variables mEnabled = 1; mTimer = 0 function CreatePage() { this.Refresh = Refresh; this.Enable = Enable; }
由于 scriptlet 是 HTML 或 ASP 页面(并且也可以作为独立文档显示),因此您有时可能会因为 IE 4(或更高版本)找不到的属性或方法而导致系统错误。 只有当您的 scriptlet 尝试访问其父环境时,才会发生这种情况。 为了解决这个问题,您需要一种方法来检测给定页面是否被视为 scriptlet。 由于 external
对象只有在 HTML 页面作为 scriptlet 运行时才会初始化,因此请提供一个布尔变量作为安全措施,并且仅在绝对安全的情况下才访问 external
对象。
var InScriptlet = (typeof(window.external.version) == "string");
上面的变量 InScriptlet
将包含 True 或 False,具体取决于属性 external.version
(scriptlet 引擎的当前版本)的类型。 您现在可以使用 InScriptlet
在您的代码中确定页面的查看方式。
使其刷新的方法是通过调用 "Refresh" 方法或在 window.onLoad
事件中设置计时器
mTimer = window.setInterval( "DoUpdatePage()", 1000, "VBScript" )
由于 ActiveX 控件和 scriptlet 都是通过相同的标记 <OBJECT>
插入的,因此您需要使浏览器区分它们(请参阅下文)。
ActiveX Control: <OBJECT> id="Button1" classid="..." width="..." height="..." <param name="..."> </OBJECT> Scriptlet: <OBJECT> id="TopTen" data="TopTen.htm" width="..." height="..." type="text/x-scriptlet" </OBJECT>
就是这样...告诉我您的想法!
致谢
有关好的书籍/示例,请查看 Scriptlets,有关书中示例,请访问 Examples