javascript在静态页面上接受参数的方法

面我来给大家说一下用javascript在静态页面上接受参数的方法
其实很简单 只要用户打开的页面url后带有参数
而javascript可以获取当前页面的url 只要对获取下来的url进行简单地解析即可

给大家看一下我的代码 只要把这些代码嵌入到页面文件即可

 程序代码

urlinfo=window.location.href;??//获取当前页面的url
len=urlinfo.length;//获取url的长度
offset=urlinfo.indexOf("?");//设置参数字符串开始的位置
newsidinfo=urlinfo.substr(offset,len)//取出参数字符串 这里会获得类似“id=1”这样的字符串
newsids=newsidinfo.split("=");//对获得的参数字符串按照“=”进行分割
newsid=newsids[1];//得到参数值
alert("您要传递的参数值是"+newsid);

不过一定要记得 这个方法只是针对含有参数的url有用
如果对方用了POST方法传递参数 url中是不会含有参数的
所以这个技巧只对GET方法或者指定了参数的url有用哦

 function getparastr(strname)
  {
   var hrefstr,pos,parastr,para,tempstr;
   hrefstr = window.location.href;
   pos = hrefstr.indexOf("?")
   parastr = hrefstr.substring(pos+1);
   para = parastr.split("&");
   tempstr="";
   for(i=0;i<para.length;i++)
   {
    tempstr = para[i];
    pos = tempstr.indexOf("=");
    if(tempstr.substring(0,pos) == strname)
    {
     return tempstr.substring(pos+1);
     }
   }
   return null;
  }
// 获取program参数
var programstr = getparastr("program");
document.write(programstr);

今天在编写程序的时候遇到两个网页间数据的传递问题。
到网上搜索了一大堆的相关资料,终于把问题给解决了。
问题的解决很大部分得归功于JAVASCRIPT的应用,其中尤为重要的是JAVASCRIPT的DOM技术。

下面是页面间常见的一些数据传递问题,以及解决方法。
1:同一个页面间,两个FORM之间的参数传递
        
<html>
<head>
<title>大鱼之家</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body>

<form name="form1" method="post" action="">
  <input type="text" name="test1" VALUE=">
  <input type="button" name="Submit" value="change_test2" onClick="ok1()">
</form>

<form name="form2" method="post" action="">
  <input type="text" name="test2">
  <input type="button" name="Submit" value="change_test1" onClick="ok2()">
</form>

</body>
</html>
<script language="JavaScript">
function ok1()
{
  document.form2.test2.value=document.form1.test1.value;
}
function ok2()
{
document.form1.test1.value=document.form2.test2.value;
}
</script>

由上可见。其中主要是对文档对象document的使用。关于文档对象document的使用方法可以参考以下文章

http://www.channel7.cn/bbs/showthread.asp?threadid=506

2:网页与弹出页面之间的数据传递:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>数据传递-大鱼</title>
</head>

<body>
<form name="my" method="post" action="#">
<input type="text" name="hehe" value="ffff">
</form>
<a href=# οnclick="javascriptpen('top-

hehehehe.asp','','scrollbars=yes,width=400,height=200')"><img

src="admin/images/edit/UpFile.gif" alt=上传文件 width="22" height="22" border=0

style="cursor: hand;"></a>
</body>
</html>

top-hehehehe.asp页面代码:

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>数据传递-大鱼</title>
</head>
<form name="bigfish" method="post" action="#">
<input type="text" name="hehe" value="Hei,Wo is your name?">
</form>
<body>
</body>
</html>
<script language="javascript">
opener.document.my.hehe.value=document.bigfish.hehe.value;
</script>

有关弹出页的使用方法可以参考如下文章:
http://www.channel7.cn/bbs/showthread.asp?threadid=512(说得非常详细)
http://www.channel7.cn/bbs/showthread.asp?threadid=503

3:页面与框架页面之间的数据传递
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>数据传递-大鱼</title>
</head>

<body>
<iframe src="top-hehehehe.asp" id="message" align=center></iframe>
<form name="my" method="post" action="#">
<input type="text" name="hehe" value="ffff">
</form>
</body>
</html>


top-hehehehe.asp页面代码:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>数据传递-大鱼</title>
</head>
<form name="bigfish" method="post" action="#">
<input type="text" name="hehe" value="Hei,Wo is your name?">
</form>
<body>
</body>
</html>
<script language="javascript">
top.document.my.hehe.value=document.bigfish.hehe.value;
</script>

4:框架网页之间的表单的文本框之间数据传递
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>数据传递-大鱼</title>
</head>

<body>
<iframe src="top-hehehehe.asp" id="message" align=center></iframe>
<iframe src="top-hehehehe1.asp" id="message1" align=center></iframe>

</body>
</html>

top-hehehehe.asp页面代码:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>数据传递-大鱼</title>
</head>
ID为message框架页
<form name="bigfish" method="post" action="#">
<input type="text" name="hehe" value="这是ID为message框架内部表单项HEHE的值">
</form>
<body>
</body>
</html>
<script language="javascript">
parent.message1.document.my.hehe.value=document.bigfish.hehe.value;
</script>


top-hehehehe1.asp页面代码:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>数据传递-大鱼</title>
</head>
ID为message框架页
<form name="bigfish" method="post" action="#">
<input type="text" name="hehe" value="这是ID为message1框架内部表单项HEHE的值">
</form>
<body>
</body>
</html>
<script language="javascript">
parent.message.document.my.hehe.value=document.bigfish.hehe.value;
</script>

使用QueryString

  使用QuerySting在页面间传递值已经是一种很老的机制了,这种方法的主要优点是实现起来非常简单,然而它的缺点是传递的值是会显示在浏览器的地址栏上的(不安全),同时又不能传递对象,但是在传递的值少而安全性要求不高的情况下,这个方法还是一个不错的方案。使用这种方法的步骤如下:

  1,使用控件创建web表单(form)

  2,创建可以返回表单的按钮和链接按钮

  3,在按钮或链接按钮的单击事件里创建一个保存URL的字符变量

  4,在保存的URL里添加QueryString参数

  5,使用Response.Redirect重定向到上面保存的URL

  下面的代码片断演示了如何实现这个方法:

  源页面代码:

  private void Button1_Click

  (object sender, System.EventArgs e)

  {

  string url;

  url="anotherwebform.aspx?name=" + TextBox1.Text + "&email=" + TextBox2.Text;

  Response.Redirect(url);

  }

  目标页面代码:

  private void Page_Load

  (object sender, System.EventArgs e)

  {

  Label1.Text=Request.QueryString["name"];

  Label2.Text=Request.QueryString["email"];

  }  

  使用Session变量

  使用Session变量是可以在页面间传递值的的另一种方式,在本例中我们把控件中的值存在Session变量中,然后在另一个页面中使用它,以不同页面间实现值传递的目的。但是,需要注意的是在Session变量存储过多的数据会消耗比较多的服务器资源,在使用session时应该慎重,当然了,我们也应该使用一些清理动作来去除一些不需要的session来降低资源的无谓消耗。使用Session变量传递值的一般步骤如下:

  1,在页面里添加必要的控件

  2,创建可以返回表单的按钮和链接按钮

  3,在按钮或链接按钮的单击事件里,把控件的值添加到session变量里

  4,使用Response.Redirect方法重定向到另一个页面

  5,在另一个页面提取session的值,在确定不需要使用该session时,要显式清除它

  下面的代码片断演示了如何实现这个方法:

  源页面代码:

  private void Button1_Click

  (object sender, System.EventArgs e)

  {

  //textbox1 and textbox2 are webform

  //controls

  Session["name"]=TextBox1.Text;

  Session["email"]=TextBox2.Text;

  Server.Transfer("anotherwebform.aspx");

  }

  目标页面代码:

  private void Page_Load

  (object sender, System.EventArgs e)

  {

  Label1.Text=Session["name"].ToString();

  Label2.Text=Session["email"].ToString();

  Session.Remove("name");

  Session.Remove("email");

  }  

  使用Server.Transfer

  这个方法相比上面介绍的方法稍微复杂一点,但在页面间值传递中却是特别有用的,使用该方法你可以在另一个页面以对象属性的方式来存取显露的值,当然了,使用这种方法,你需要额外写一些代码以创建一些属性以便可以在另一个页面访问它,但是,这个方式带来的好处也是显而易见的。总体来说,使用这种方法是简洁的同时又是面向对象的。使用这种方法的整个过程如下:

  1,在页面里添加必要的控件

  2,创建返回值的Get属性过程

  3,创建可以返回表单的按钮和链接按钮

  4,在按钮单击事件处理程序中调用Server.Transfer方法转移到指定的页面

  5,在第二个页面中,我们就可以使用Context.Handler属性来获得前一个页面实例对象的引用,通过它,就可以使用存取前一个页面的控件的值了

  以下代码综合实现上述步骤过程的代码:

    源页面代码:

  把以下的代码添加到页面中

  public string Name

  {

  get

  {

  return TextBox1.Text;

  }

  }  

  public string EMail

  {

  get

  {

  return TextBox2.Text;

  }

  }

  然后调用Server.Transfer方法

  private void Button1_Click

  (object sender, System.EventArgs e)

  {

  Server.Transfer("anotherwebform.aspx");

  }

  目标页面代码:

  private void Page_Load

  (object sender, System.EventArgs e)

  {

  //create instance of source web form

  WebForm1 wf1;

  //get reference to current handler instance

  wf1=(WebForm1)Context.Handler;

  Label1.Text=wf1.Name;

  Label2.Text=wf1.EMail;

  }
  

  在ASP.NET 2.0中启用了跨页面传送功能,其功能和用法在以后在做介绍!  

  页面之间传递值  

  方式1:  

  在接收页 的html代码里加上一行: <!--Reference Page = "WebForm1.aspx"-->  

  WebForm1 fp=(WebForm1)Context.Handler;

  this.TextBox1.Text=fp.name; //name 是第一页的public变量  

  Context 提供对整个当前上下文(包括请求对象)的访问。您可以使用此类共享页之间的信息。

  方式2:GET方式

在发送页

   public int sum=0;  

   int i =int.Parse(this.TextBox1.Text)*2;  

   Server.Transfer("WebForm2.aspx?sum="+i);  

   接收页

   this.TextBox1.Text=Request["sum"].ToString();

   or this.TextBox1.Text=Request.Params["sum"].ToString();

   this.TextBox1.Text=Request.QueryString["sum"];
  

  方法3:全局变量  

   发送页:

   Application["sum"]=this.TextBox1.Text;

   Server.Transfer("WebForm2.aspx");  

   接收页:

   this.TextBox1.Text=(string)Application["sum"];  

  Application实质上是整个虚拟目录中所有文件的集合,如果想在整个应用范围内使用某个变量值,Application对象将是最佳的选择  

  在这里用Session[""]的方法雷同  

  方法4:

   发送页:

   1.定义静态变量: public static string str="";

   2. str=this.TextBox1.Text;

   Server.Transfer("webform2.aspx");

   接收页:

   1.引入第一页的命名空间:using WebApplication1;

   2 this.TextBox1.Text=WebForm1.str;

2006-7-22
ASP.NET四种页面导航方式之比较与选择

一、超级链接

    从一个表单进入另一个表单最简单的方式是使用HTML超级链接控件。在Web表单中,使用超级链接的HTML代码类如:

  <a href="WebForm2.aspx">进入表单2</a>

    当用户点击该超级链接,WebForm2.aspx执行并将结果发送到浏览器。超级链接导航方式几乎可用于任何地方,包括HTML页面和普通的ASP页面。ASP.NET还提供了另一种可替换使用的方法,即HyperLink服务器控件:

  <form id="Form1" method="post" runat="server">

    <asp:HyperLink id="HyperLink1" runat="server"

    NavigateUrl="WebForm2.aspx">进入表单2</asp:HyperLink>

  </form>

    上述HTML代码的运行结果和第一个例子相同,因为ASP.NET把HyperLink Web服务器控件视为一个HTML超级链接控件。但两者有一点重要的区别,HyperLink Web服务器控件可以在服务器端编程。具体地说,可以在程序代码中改变它的NavigateUrl属性,从而允许构造出具体目标可根据应用的当前状态动态变化的超级链接,例如:

  Private Sub Button1_Click( _

    ByVal sender As System.Object, _

    ByVal e As System.EventArgs) _

    Handles Button1.Click

    HyperLink1.NavigateUrl = "WebForm3.aspx"

  End Sub

    这段代码执行后,如果用户点击链接,他看到的将是WebForm3.aspx,而不是WebForm2.aspx。

  二、用程序控制重定向

    虽然超级链接能够从一个页面导航到另一个页面,但这种导航方式是完全由用户控制的。有些时候,我们可能要用代码来控制整个导航过程,包括何时转到另一个页面。在这些场合,ASP.NET有三种不同的方式可以达到相似的目的:调用Response对象的Redirect方法,调用Server对象的Transfer或Execute方法。这三种导航方式的行为基本相似,但也有区别。

    2.1 Response.Redirect

    Response.Redirect方法导致浏览器链接到一个指定的URL。当Response.Redirect()方法被调用时,它会创建一个应答,应答头中指出了状态代码302(表示目标已经改变)以及新的目标URL。浏览器从服务器收到该应答,利用应答头中的信息发出一个对新URL的请求。

    这就是说,使用Response.Redirect方法时重定向操作发生在客户端,总共涉及到两次与服务器的通信(两个来回):第一次是对原始页面的请求,得到一个302应答,第二次是请求302应答中声明的新页面,得到重定向之后的页面。

    2.2 Server.Transfer

    Server.Transfer方法把执行流程从当前的ASPX文件转到同一服务器上的另一个ASPX页面。调用Server.Transfer时,当前的ASPX页面终止执行,执行流程转入另一个ASPX页面,但新的ASPX页面仍使用前一ASPX页面创建的应答流。

    如果用Server.Transfer方法实现页面之间的导航,浏览器中的URL不会改变,因为重定向完全在服务器端进行,浏览器根本不知道服务器已经执行了一次页面变换。

 

默认情况下,Server.Transfer方法不会把表单数据或查询字符串从一个页面传递到另一个页面,但只要把该方法的第二个参数设置成True,就可以保留第一个页面的表单数据和查询字符串。

    同时,使用Server.Transfer时应注意一点:目标页面将使用原始页面创建的应答流,这导致ASP.NET的机器验证检查(Machine Authentication Check,MAC)认为新页面的ViewState已被篡改。因此,如果要保留原始页面的表单数据和查询字符串集合,必须把目标页面Page指令的EnableViewStateMac属性设置成False。

    2.3 Server.Execute

    Server.Execute方法允许当前的ASPX页面执行一个同一Web服务器上的指定ASPX页面,当指定的ASPX页面执行完毕,控制流程重新返回原页面发出Server.Execute调用的位置。

    这种页面导航方式类似于针对ASPX页面的一次函数调用,被调用的页面能够访问发出调用页面的表单数据和查询字符串集合,所以要把被调用页面Page指令的EnableViewStateMac属性设置成False。

    默认情况下,被调用页面的输出追加到当前应答流。但是,Server.Execute方法有一个重载的方法,允许通过一个TextWriter对象(或者它的子对象,例如StringWriter对象)获取被调用页面的输出,而不是直接追加到输出流,这样,在原始页面中可以方便地调整被调用页面输出结果的位置。

    为说明其工作过程,下面我们创建一个Web表单,放入一个按钮控件(Button1)和一个文本控件(Literal1),在设计界面中转入代码视图,加入一个System.IO名称空间的Imports语句,然后加入用户点击按钮时执行的代码:

  Private Sub Button1_Click( _

    ByVal sender As System.Object, _

    ByVal e As System.EventArgs) _

    Handles Button1.Click

    Dim sw As StringWriter = New StringWriter()

    Server.Execute("WebForm2.aspx", sw)

    Literal1.Text = sw.ToString()

  End Sub

    然后为同一个Web应用创建第二个页面WebForm2.aspx。转入该页面的HTML视图,修改其Page指令禁止ViewState检查:

  <%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm2.aspx.vb"

    Inherits="Navigate.WebForm2" EnableViewStateMac="false"%>

    再转到设计视图,为第二个页面增加一些控件。接下来,把第一个页面设置成默认页面,启动应用。点击按钮,WebForm2的控件将显示在WebForm1中放置Literal按钮的地方,如图一,注意页面标题和URL仍旧显示原始页面WebForm1。

  

图一:用Server.Execute合并两个源文件的页面

 

  用Server.Transfer或Server.Execute方法实现导航时,还要注意一点:最后得到的页面可能不是合法的HTML页面,因为最终返回给客户端的页面可能包含多个<HTML>和<BODY>等标记。IE浏览器看来能够容忍并正确处理这类情形,但如果用户要用到其他的浏览器,最好仔细测试一下。

  三、比较与选择

    既然从一个页面导航到另一个页面的办法有这么多,应该如何选择最佳的导航方式呢?下面是一些需要考虑的因素:

    ·如果要让用户来决定何时转换页面以及转到哪一个页面,超级链接最适合。

    ·如果要用程序来控制转换的目标,但转换的时机由用户决定,使用Web服务器的HyperLink控件,动态设置其NavigateUrl属性。

    ·如果要把用户连接到另一台服务器上的资源,使用Response.Redirect。

    ·用Response.Redirect把用户连接到非ASPX的资源,例如HTML页面。

   ·如果要将查询字符串作为URL的一部分保留,使用Response.Redirect。

    ·如果要将执行流程转入同一Web服务器的另一个ASPX页面,应当使用Server.Transfer而不是Response.Redirect,因为Server.Transfer能够避免不必要的网络通信,从而获得更好的性能和浏览效果。

    ·如果要捕获一个ASPX页面的输出结果,然后将结果插入另一个ASPX页面的特定位置,则使用Server.Execute。

    ·如果要确保HTML输出合法,请使用Response.Redirect,不要使用Server.Transfer或Server.Execute方法。


评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值