这种套路怎样来设计呢?不重载页面更新了表单里的元素问题了

hntjc 2002-08-01 01:27:33
各位大虾:

  大家好有如下问题请指教!


  有一web页面,页面里有一只表单(form),表单里有多只文本框,另外在这页面里
还有很多的表单之外的按钮(button),按钮的类型为普通类型不是这种submit类型的

除了表单文本框按钮之外,此WEB的页面里还有预先用这frontpage做好的排好版的图
片了表格了文字了.这么多东西组成了一张完整的页面了

我想这样做,点按钮到数据库里读数据,读出来的数据再填到表单里的文本框里(text),
如果按钮的类型为submit那我只要再做一只asp的来响应就可以了.但问题按钮为普通类型的,这样怎样来处理呢?还有读出来的数据又怎样才能填到表单的文本框里而不用重载这页面,达到只更新了表单里文本框内容另外不动的目的了?
...全文
85 点赞 收藏 6
写回复
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
meizz 2002-08-01
用一个隐藏的iframe也可以实现:
在主页面里<iframe name=meizz style="display"></iframe>
页面里的每个按钮都可以写成带参数的形式且传给这个隐藏的iframe
<input type=button value=ok onclick="meizz.location.href='aaa.asp?aa=aa'">
这样就相当于向数据库提交了信息,且页面是不会被刷新的(iframe是隐藏的)。
在这个隐藏帧里读到数据库里的数据后你再将数据写到主页面里去就行了。
aaa.asp:
parent.document.all.inputname.value="abc"

说得有些乱,但大体意思还是可以理解的。
回复
hntjc 2002-08-01
楼上的是这种套路:

按了按钮调用预先做好的ASP文件,还得弹出这窗口

我想把读数据的代码呢不要另外做一只ASP文件,点了一下按钮就调用读数据的
代码了,还有如果按照了楼上的,还得弹出一只窗口来,我并不想再弹出一只窗口来,最好读数据的代码就在此WEB页面里

还有读出来的数据如何呢填到表单里文本框里,而前提不用再重载这WEB页面,
只更新这表单里文本框的内容,而另外的部分呢不动,怎样来做呢
回复
Iamfish 2002-08-01
freezwy(网络自由人) 说的,相信楼主也看不懂。

我可以用弹出窗口的形式,按那个按钮之后,弹出一个小窗口。那个窗口的URL就是你的那个ASP文件。

数据完成之后,可能过过JS把那些数据写到文本框中。

只是给你一种思想。编程,是要思考的,不要做代码组装员。
回复
evonne_feng 2002-08-01
<form name="form1" method="post" action="aa.asp">
...
</form>
<input type="button" value="提交" onclick="form1.submit()">
回复
freezwy 2002-08-01
不刷新页面的情况下调用远程ASP
RS技术的一个具体例子
  在前面的帖子中,我介绍了RS的基本工作原理,显然如果将RS技术运用在一个网站的设计中将会有很多非凡的作用(尤其是它的那个最大的优点,可以在不刷新页面的情况下调用服务端的代码)。正是因为这个特点,你就可以象在编写一个传统的C/S模式的程序一样,对数据库的数据进行处理了(我想大家一定很想知道具体应该如何来实现了,下面将给出一个具体的例子,调试这个破程序几乎快把我给累死,呵呵。)
  从前面的描述可以看到,要使用RS技术就需要客户端和服务端满足下面两个条件:

1。客户端只需要支持Java applet即可

2。而服务端只需要支持ASP即可
  换句话说,就是RS技术是完全独立与浏览器的(当然浏览器至少需要满足支持Java和JavaScript),你可以在IE中使用,也可以完全在NC中使用,这也是区别与RDS技术的一个显著特点。
  在能够灵活运用RS技术前,先要说明一个问题,就是前面也曾经提到过的“异步调用”的问题。也正是因为有异步调用,才能够实现你只刷新页面的某一部分而不用刷新整个页面。
  由于它的这个特点,你可以让服务端来实现在你浏览页面的同时对你输入数据的合法性检查(当然这可以是一系列很复杂的合法性检查,例如需要将用户输入的数据和数据库内已有的数据进行对比等,这个可不是客户端的JS能够解决的),然后当服务端返回检查结果后,你再进行相应的操作(例如弹出一个对话框告诉用户输入出错等等).异步调用时的语法如下:
  RSExecute(serverURL, functionname, param_list)
  第一个参数是你想调用的asp页面的完整的URL路径
  第二个参数是你想调用函数的名称
  后面的就是该函数需要的输入参数了
  如果你想调用的函数需要两个输入参数的话,就是这样的写法:
  RSExecute(serverURL, functionname, f_arg_1, f_arg_2)
当进行调用时有两种写法,
一种是有返回结果的调用方式:
objResult = RSExecute(serverURL, functionname, f_arg_1, f_arg_2);
另外一种则是没有返回结果的调用方式:
RSExecute(url, func_name, f_arg_1, f_arg_2, CallbackFunction);
这种调用方式要特别的注意,其中的CallbackFunction是客户端的一个JS函数它表示一但RS执行完毕服务端上的调用,就会马上调用这个函数,并把结果返回到这个函数中去。
一个典型的CallbackFunction函数应该是这样的结构:
  function CallbackFunction(objResult) {
    //你自己的处理过程
   }
其中唯一的输入参数objResult就是RS调用的返回值.
  下面我们假设这样一种情况:
  用户在浏览器中输入了用户的e-mail地址,然后用户离开了e-mail地址输入框进入接下来的输入过程,这个时候就是RS该上场了,它根据用户输入的地址在服务端的数据库中查询这个地址,就可以判断出这个用户是否已经存在,然后把结果返回给客户端,在客户端再使用DHTML技术在一个叫"ShowResult"的输入框里面提示用户以前输入的信息。
  function CallbackFunc(objResult) {
    // 提示用户的信息
    window[objResult.context].value = objResult.return_value;
   }
  而RSExecute()应该这么调用RSExecute(serverURL, functionname, f_arg_1, CallbackFunc,
"ShowResult");
  不说了,不说了,上面罗嗦了这么多,我想大家也都看得头大了,下面还是让具体的代码来发言把:
(请在使用代码前在你的服务器上建立一个叫NW的系统DSN文件,该文件使用了Northworld即中文ACCESS97自带的示例数据库)
  下面的例子是这么进行的,default.htm中分为两祯,在main.html页面中使用了RS技术,大家可以注意到在main.html中没有使用到submit所以如果你在该页面中直接敲回车键的话什么都不会出现,你必须通过鼠标单击那个"获取信息"按扭来使用这个局部页面刷新技术。在单击完该按扭后,页面会有一段小小的延迟(这段时间内java applet在后台建立了和服务端的连接)然后马上页面回复正常的鼠标,你可以在该页面中继续进行其他的操作。而不必象普通页面刷新时,你只有等待数据。而info.asp大家一眼就能够看明白,其实就是一个很简单的处理字符串的程序。
  如果大家要是对DHTML技术熟悉的话,完全可以在客户端完成这些操作。至于EmpData.asp就是服务端处理数据的程序了。好了,其中的好处大家可以自己去体会。
特别注意,不要改变太多代码,不然很容易出错,毕竟是在使用JavaScript编程.
Default.htm文件代码如下:
<HTML>
<HEAD>
<TITLE>RS技术的实现例子</TITLE>
</HEAD>
<FRAMESET id=fset rows="70%,30%">
<FRAME name=main src="main.html">
<FRAME name=info src="info.asp">
</FRAMESET>
</HTML>
Maim.html文件代码如下
<HTML>
<HEAD>
<TITLE>RS技术的实现例子</TITLE>
</HEAD>
<BODY>
<script language="JavaScript" src="http://YourServer/_ScriptLibrary/rs.htm"></script>
<script language="JavaScript">
RSEnableRemoteScripting("http://YourServer/_ScriptLibrary");
</script>
<h1>雇员信息</h1>
<hr>
<form name=MyForm>
请输入你想查询的名字:
<br><input type=text name="empLastName" size=40>
<input type=button name=btnExecute style="width=150"
value="获取信息"
onclick="execAsynch(empLastName.value)">
</form>
<hr>

<SCRIPT LANGUAGE="javascript">
var serverURL = "http://YourServer";
var pageURL = "/batman/EmpData.asp";
function refreshPage(co)
{
if (co.status != 0) {
alert("发生异常错误\n" +
message);
}
strText = co.return_value;
top.info.location = "info.asp?info=" + escape(strText);
}
function execAsynch(empLastName)
{
RSExecute(serverURL+pageURL, "GetEmpInfoAsArray",
empLastName, refreshPage);
}
</SCRIPT>
</BODY>
</HTML>

info.asp文件代码
<HTML>
<BODY>
<%
Response.Write Request.ServerVariables("REMOTE_USER")
strText = Request.QueryString("info")
If strText = "" Then Response.End
arrData = split(strText, "|")
arrLabels = split("职工,头衔,城市,雇佣日期", ",")
%>
<table border=0>
<%
for i=0 to 3
Response.Write "<tr>"
Response.Write "<td><b>" & arrLabels(i) & "</b></td>"
Response.Write "<td><i>" & arrData(i) & "</i></td>"
next
%>
</table>
</BODY>
</HTML>

EmpData.asp文件
<%@ LANGUAGE=VBSCRIPT %>
<% RSDispatch %>

<SCRIPT RUNAT=SERVER Language=javascript>
<!--#INCLUDE VIRTUAL="/_ScriptLibrary/RS.ASP"-->

function Description()
{
this.GetEmpInfoAsArray = DoGetData;
}
public_description = new Description();

function DoGetData(empName)
{
sql = "select * from 雇员 where [名字]='" + empName + "'";
rst = new ActiveXObject("ADODB.Recordset");
rst.CursorLocation = 3;
rst.Open(sql, "NW");
i = 0;
   strText = "";
if (rst.RecordCount == 1) {
strText += rst.Fields("雇员ID").Value + " - " +
rst.Fields("尊称").Value + " " +
rst.Fields("姓氏").Value + " " +
rst.Fields("名字").Value;
strText += "|";
strText += rst.Fields("头衔").Value;
strText += "|";
strText += rst.Fields("城市").Value + " " +
rst.Fields("地区").Value + ", " +
rst.Fields("国家").Value;
strText += "|";
d = new Date(rst.Fields("雇用日期").Value);
strText += (1+d.getMonth()) + "/" + d.getDate() + "/" +d.getYear();
}
return strText;
}
</SCRIPT>
回复
cshadow 2002-08-01
你的表述有点混乱,根据我的理解应该是这样的,点击按钮读数据,自动刷新这个页,刷新之后,文本框中出现读取的数据,是这样吗?
回复
发动态
发帖子
ASP
创建于2007-09-28

2.8w+

社区成员

ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
申请成为版主
社区公告
暂无公告