XMLHTTP ActiveX对象的访问ASP区段变量的其他方法

2016-01-29 18:36 6 1 收藏

XMLHTTP ActiveX对象的访问ASP区段变量的其他方法,XMLHTTP ActiveX对象的访问ASP区段变量的其他方法

【 tulaoshi.com - ASP 】

  几个月以前,一个同事到我这里来,说他有一个客户端JavaScript的问题。我不得不向他解释说,活动服务器页面(ASP)的区段变量不能从客户端访问,除非它们通过cookie或者隐藏的输入框被传递。但是我没有停止继续寻找从客户端访问ASP区段变量更好方法的工作。  

最近在研究如何不需要上传和下载页面就能够从服务器获取信息时,我读到了关于XMLHTTP ActiveX对象的内容。从本质上讲,这个对象为Internet Explorer和Web服务器通讯并接收回应提供了一种方法。它是MSXML动态加载库的一部分,其当前的版本是第4版,并能从微软免费下载。同样值得重要的是,注意对于微软Internet Explorer 5.x,MSXML缺省的版本还是第2版。

XMLHTTP基础
你可以使用XMLHTTP对象在服务器上执行一个ASP,等待服务器的回应,然后根据回应来动作。这意味着有了一个JavaScript函数和一个专用的动态服务器页面,就有可能解决从客户端访问变量的问题。客户端需要区段变量的值吗?没问题!你要做的全部工作就是调用一个小小的函数。

实现XMLHTTP对象
只要开始试着实现以前没有尝试过的概念或特性,我通常会发现把问题分解成逻辑件会更容易一些。在这种情况下,我从服务器端的和客户端的开始。心里有这个概念,我命名为test.asp的服务器端活动服务器页面看起来就是这个样的了:

<%@ Language=VBScript%
<%
Response.Write
Session(Request.QueryString("variable"))
%
这个服务器端代码段的目的是返回任何和查询字符串里同键相关联的ASP区段变量的值。

由于请求是从客户端发起的,而且有一个对象正在被使用,所以客户端这一部分会更详细。创建XMLHTTP对象、设置对象的属性、调用对象的发送方法,以及根据对象返回的信息进行动作,这些都是有必要的。Listing A是执行这些任务的JavaScript。
要进一步检查XMLHTTP的可能性,就有必要往回走一步,这是因为利用URL把查询信息从客户端送到服务器端是有局限性的。URL最大长度限定为2,048字节。这2KB的最大长度还包括了URL的非查询字符串这部分。要更进一步就要找到一种更好的方法,把信息从客户端送到服务器端。

我只花了大约20分钟就决定好了如何把信息从客户端传递到服务器端。我决定使用HTTP。在你确定我脑子发懵但已经回过神以前,让我来解释一下。我要在HTTP报头里传递信息。通过包头来传递信息就能够避免使用URL传递信息所无法避免的2,048字节的限制。

心里有了这些,现在就需要修改通过URL传递信息的例子了。在客户端不是要把参数添加到test.asp的URL里,而是XMLHTTP对象的setHeader方法会传递这个参数。进行这样的修改就产生了Listing B里的客户端程序。

在服务器端,有必要从HTTP报头里而不是请求对象的查询字符串里取回区段变量名。其结果是:

<%@ Language=VBScript %
    <%
     Response.Write Session(Request.ServerVariables("HTTP_test"))
    %
更进一步
我在这里所描述的对象叫做XMLHTTP。注意这个对象的头3个字母是XML。你已经见过了如何在客户端和服务器端传递信息,但是XMLHTTP对象的初衷是允许信息作为XML在客户端和服务器端传递信息。在以后的文章里,我会解释如何使用XML的简单对象访问协议(SOAP)来交换更加复杂的信息。
 

来源:https://www.tulaoshi.com/n/20160129/1506519.html

延伸阅读
在运行于不同进程中的对象之间建立通讯(无论是在同一台计算机上,还是在相距数千公里的计算机上)是常见的开发目标,尤其是在生成大范围分布式应用程序的时候。传统上,这需要深入了解相关知识:不仅是关于通讯流任一端的对象的知识,而且还有关于低级别协议的主机、应用程序编程接口以及配置工具或文件的知识。简言之,它是一项需要大量专业...
关于如何操作其他窗体的控件或变量的方法!其实解决的方法有很多,在这里只做简单的总结。1. 定义全局变量其实这个方法比较简单也很好理解,我们只要在一个module里面定义了两个全局变量就可以了。例如:public frm1 as new form1() Public frm2 as new form2()这样,我们无论在哪里想访问就很容易了。但是,这样做会耗费比较多的系统资源。一...
关于如何操作其他窗体的控件或变量的方法!其实解决的方法有很多,在这里只做简单的总结。对于其他方法,请多指教!1. 定义全局变量其实这个方法比较简单也很好理解,我们只要在一个module里面定义了两个全局变量就可以了。例如:public frm1 as new form1() Public frm2 as new form2()这样,我们无论在哪里想访问就很容易了。但是,这样做会...
标签: Web开发
    试验如下: 提交Form代码(Test.htm): HTML HEAD META NAME="GENERATOR" Content="Microsoft Visual Studio 6.0" TITLE/TITLE script language=javascript function Test() { strA = "submit1=Submit&text1=scsdfsd"; file://Looks like QueryString,But there's no "?" here! var oReq = new ActiveXObject("MS...
标签: Web开发
从今天开始我们将正式学习 ASP 的精华部分 --ActiveX 组件。事实上,当你用 ASP 编写服务器端应用程序时,必须依靠 ActiveX 组件来强大 Web 应用程序的功能,譬如:你需要连接数据库,对数据库进行在线操作或者对 WEB 服务器上的文件系统进行操作,亦或你需要一个 WEB 广告交换程序,所有这一切你都必须通过调用 ASP 内建的 ActiveX 组件或...

经验教程

872

收藏

13
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部