chiname

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 :: 管理 ::

        前阵子找工作面试的时候,主管问有没有做过无刷新显示数据,很尴尬的回答没有之后立刻试了一下,感觉挺简单的,麻烦的是JS操作XMLDocoment显示在页面上。
        简单将代码贴出来,欢迎指导:)
-------------------------------------------------test.aspx.vb---------------------------------------------
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        '在此处放置初始化页的用户代码

        If Not (Me.Request("state") Is Nothing) Then   '第一次进入,xmlHttp还未POST时直接跳过
            Dim Ds As New DataSet
            Me.Da.SelectCommand.CommandText = "select * from " + Me.Request("state").ToString
            Me.Da.Fill(Ds)
            Dim writer As New XmlTextWriter(Response.OutputStream, Response.ContentEncoding)
            writer.Formatting = Formatting.Indented
            writer.Indentation = 4
            writer.IndentChar = " "
            Ds.WriteXml(writer)  '将DS的数据写到XML
            writer.Flush()
            Response.End()
            writer.Close()
        End If
    End Sub

----------------------------------------test.aspx------------------------------------------
<%@ Page Language="vb" AutoEventWireup="false" Codebehind="test.aspx.vb" Inherits="norefresh.test"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
 <HEAD>
  <title>NoRefresh</title>
  <meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
  <meta content="Visual Basic .NET 7.1" name="CODE_LANGUAGE">
  <meta content="JavaScript" name="vs_defaultClientScript">
  <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
  <script>
    function load(state){
    var oXMLHTTP = new ActiveXObject("MSXML2.XMLHTTP");
    var oDoc = new ActiveXObject("MSXML2.DOMDocument");
    oXMLHTTP.open("POST", "test.aspx?state="+state, false);
    oXMLHTTP.send("");
    result = oXMLHTTP.responseText;
    oDoc.loadXML(result);
    var field = document.all("TxtField").value;
    var field2= document.all("TxtField2").value;
    maxNum_out = oDoc.getElementsByTagName(field).length;
    document.all("tdtitle").innerHTML=field;
    document.all("tdtitle2").innerHTML=field2;
    document.all("td1").innerHTML="";
    document.all("td2").innerHTML="";
    
    for(i=0;i<maxNum_out;i++) {
    str1 =oDoc.getElementsByTagName(field).item(i).text;
    str2 =oDoc.getElementsByTagName(field2).item(i).text;
    document.all("td1").innerHTML+=str1+"<BR>";
    document.all("td2").innerHTML+=str2+"<BR>";
   }
    }
  </script>
 </HEAD>
 <body MS_POSITIONING="GridLayout">
  <form id="Form1" method="post" runat="server">
   <FONT face="宋体">
    <asp:textbox id="TxtSQL" style="Z-INDEX: 101; LEFT: 18px; POSITION: absolute; TOP: 22px" runat="server"
     ToolTip="SQL  hare!" Height="26px" Width="560px">authors</asp:textbox><INPUT style="Z-INDEX: 102; LEFT: 472px; WIDTH: 99px; POSITION: absolute; TOP: 56px; HEIGHT: 26px"
     onclick="load(TxtSQL.value)" type="button" value="Go">
    <TABLE id="Table1" style="Z-INDEX: 103; LEFT: 16px; WIDTH: 544px; POSITION: absolute; TOP: 104px; HEIGHT: 190px"
     cellSpacing="1" cellPadding="1" width="544" border="1">
     <TR>
      <TD id="tdtitle" style="WIDTH: 166px; HEIGHT: 33px"></TD>
      <TD id="tdtitle2" style="HEIGHT: 33px"></TD>
     </TR>
     <TR>
      <TD id="td1" style="WIDTH: 166px"></TD>
      <TD id="td2"></TD>
     </TR>
    </TABLE>
    <asp:textbox id="TxtField" style="Z-INDEX: 104; LEFT: 16px; POSITION: absolute; TOP: 56px" runat="server"
     ToolTip="Field Hare!" Height="25px" Width="79px">city</asp:textbox><asp:textbox id="TxtField2" style="Z-INDEX: 106; LEFT: 104px; POSITION: absolute; TOP: 56px"
     runat="server" Height="24px" Width="80px">au_fname</asp:textbox></FONT></form>
 </body>
</HTML>

        这个例子非常简单,后来尝试用JS把客户端的XMLDocument Send到服务器端,再读入DataSet,想直接绑定到DataGrid,但是失败了,代码如下,希望哪位高手指点一二

---------------------------------------test.aspx.vb------------------------------------
    Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        '在此处放置初始化页的用户代码

        If Not (Me.Request("state") Is Nothing) Then
            Dim Ds As New DataSet
            Me.Da.SelectCommand.CommandText = "select * from " + Me.Request("state").ToString
            Me.Da.Fill(Ds)
            Dim writer As New XmlTextWriter(Response.OutputStream, Response.ContentEncoding)
            writer.Formatting = Formatting.Indented
            writer.Indentation = 4
            writer.IndentChar = " "
            Ds.WriteXml(writer)
            writer.Flush()
            Response.End()
            writer.Close()
        End If
        If Not (Me.Request("isxml") Is Nothing) Then
            Dim ds1 As New DataSet
            ds1.ReadXml(Me.Request.InputStream)
            Me.DataGrid1.DataSource = ds1.Tables(0).DefaultView
            Me.DataGrid1.DataBind()
        End If
    End Sub

----------------------------------------------test.aspx-----------------------------------
<%@ Page Language="vb" AutoEventWireup="false" Codebehind="test.aspx.vb" Inherits="norefresh.test"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
 <HEAD>
  <title>NoRefresh</title>
  <meta content="Microsoft Visual Studio .NET 7.1" name="GENERATOR">
  <meta content="Visual Basic .NET 7.1" name="CODE_LANGUAGE">
  <meta content="JavaScript" name="vs_defaultClientScript">
  <meta content="http://schemas.microsoft.com/intellisense/ie5" name="vs_targetSchema">
  <script>
    function load(state){
    var oXMLHTTP = new ActiveXObject("MSXML2.XMLHTTP");
    var oDoc = new ActiveXObject("MSXML2.DOMDocument");
    oXMLHTTP.open("POST", "test.aspx?state="+state, false);
    oXMLHTTP.send("");
    result = oXMLHTTP.responseText;
    oDoc.loadXML(result);
    
    document.all("textxml").value=oDoc.xml;
    var sxml=oDoc.xml;
    var oXMLHTTP2= new ActiveXObject("MSXML2.XMLHTTP");
    oXMLHTTP2.open("POST","test.aspx?isxml=yes",false);
    oXMLHTTP2.send(sxml);
    }
  </script>
 </HEAD>
 <body MS_POSITIONING="GridLayout">
  <form id="Form1" method="post" runat="server">
   <FONT face="宋体">
    <asp:textbox id="TxtSQL" style="Z-INDEX: 101; LEFT: 18px; POSITION: absolute; TOP: 22px" runat="server"
     ToolTip="SQL  hare!" Height="26px" Width="560px">authors</asp:textbox><INPUT style="Z-INDEX: 102; LEFT: 472px; WIDTH: 99px; POSITION: absolute; TOP: 56px; HEIGHT: 26px"
     onclick="load(TxtSQL.value)" type="button" value="Go">
    <TABLE id="Table1" style="Z-INDEX: 103; LEFT: 16px; WIDTH: 544px; POSITION: absolute; TOP: 104px; HEIGHT: 190px"
     cellSpacing="1" cellPadding="1" width="544" border="1">
     <TR>
      <TD id="tdtitle" style="WIDTH: 166px; HEIGHT: 33px"></TD>
      <TD id="tdtitle2" style="HEIGHT: 33px"></TD>
     </TR>
     <TR>
      <TD id="td1" style="WIDTH: 166px"></TD>
      <TD id="td2"></TD>
     </TR>
    </TABLE>
    <asp:textbox id="TxtField" style="Z-INDEX: 104; LEFT: 16px; POSITION: absolute; TOP: 56px" runat="server"
     ToolTip="Field Hare!" Height="25px" Width="79px">city</asp:textbox><asp:textbox id="TxtField2" style="Z-INDEX: 105; LEFT: 104px; POSITION: absolute; TOP: 56px"
     runat="server" Height="24px" Width="80px">au_fname</asp:textbox><input type="hidden" id="textxml" runat="server" style="Z-INDEX: 106; LEFT: 19px; POSITION: absolute; TOP: 311px">
    <asp:DataGrid id="DataGrid1" style="Z-INDEX: 107; LEFT: 22px; POSITION: absolute; TOP: 302px"
     runat="server" Width="536px" Height="163px"></asp:DataGrid></FONT></form>
 </body>
</HTML>



版权声明:CSDN是本Blog托管服务提供商。如本文牵涉版权问题,CSDN不承担相关责任,请版权拥有者直接与文章作者联系解决。


[点击此处收藏本文]
发表于 2005年01月30日 7:41 AM

评论

# 回复:无刷新显示数据--xmlHttp的应用 2005-01-30 5:47 PM ixulf
其实,第一个程序中
oXMLHTTP.open("POST", "test.aspx?state="+state, false);
oXMLHTTP.send("");
服务器端另外的进程中执行了test.aspx,并返回xml数据,你打开的第一个test.aspx的客户端利用oXMLHTTP.responseText得到第二个test.aspx返回xml数据,用客户端代码显示其中的数据;

同样第二个程序中,也有二个test.aspx程序被执行,第二个程序并没有返回数据到第一程序,而datagrid服务器控件在第一个程序中已执行完毕了,并没有绑定数据。
在ds1.ReadXml(Me.Request.InputStream)
后面加ds1.WriteXml(filename)保存xml数据到文件,你可能会得到那些xml数据的文件,可以证明你的那些代码被执行了,也就是另外一个test.aspx被执行了。



# 回复:无刷新显示数据--xmlHttp的应用 2005-01-30 7:23 PM qixiao
谢谢 ixulf朋友

我很疑惑的是,在第二次通过xmlHttp Post过来后,test.aspx又有一次的执行了page_load事件,并且成功将xmlHttp Send过来的xmldocument加载到DataSet中,但到了DataGrid的DataBind就不执行了呢?第二次执行的Page_Load之前少了什么过程么?还是说DataGrid加载了之前保存的ViewState?
posted on 2005-03-01 13:25  把我的欢乐带给你  阅读(362)  评论(0)    收藏  举报