65.9K
CodeProject 正在变化。 阅读更多。
Home

仅刷新 Web 页面的部分内容

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.43/5 (4投票s)

2001年5月9日

3分钟阅读

viewsIcon

225227

downloadIcon

1568

一篇关于刷新 Web 页面上的对象而无需刷新整个页面的文章

Top Ten Picture

背景

我需要只刷新网页的一部分,而不是刷新整个页面。每次我尝试时,它总是会刷新整个页面。我感到非常沮丧,然后我阅读了 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

© . All rights reserved.