以兩個頁面做出類似奇摩搜尋的功能
以兩個頁面做出類似奇摩搜尋的功能
ajax.js
var objId; //TextBox ID
//TextBox onkeyup 觸發的事件
function fAJAXRequest()
{
objId=window.event.srcElement.id;
var sTargetID="dv"+objId;
var sURL="process.aspx";
var e = document.getElementById( sTargetID );
if(e)
{
new oAJAXRequest(e,sURL,objId);
}
}
//清空結果
function ClearRequest()
{
document.getElementById("dv"+objId).innerHTML="";
}
//來自Process頁面取得結果,並將結果寫入目標DIV
function fAJAXStateChange( hAJAXRequest )
{
if( hAJAXRequest && hAJAXRequest.mRequest && hAJAXRequest.mRequest.readyState == 4 )
{
var s = hAJAXRequest.mRequest.responseText;
hAJAXRequest.mhTarget.innerHTML = s;
}
}
//呼叫Process 頁面並執行搜尋
function oAJAXRequest(hTarget,sURL,txtId)
{
var txtVal=document.getElementById(txtId).value;
if(document.getElementById(txtId).value!='')
{
var me = this;
this.mRequest = null;
this.mhTarget = hTarget;
sURL=sURL+"?search="+txtVal+"&Id="+txtId+"&X="+event.screenX;
if( window.XMLHttpRequest ) //FF,NS,OP,IE7
{
this.mRequest = new XMLHttpRequest();
}
else
if( window.ActiveXObject ) //IE5 & 6
{
this.mRequest = new ActiveXObject("Microsoft.XMLHTTP");
}
if( this.mRequest )
{
this.mRequest.open( 'GET', sURL , true );
this.mRequest.onreadystatechange = function(){ fAJAXStateChange(me); };
this.mRequest.send( null );
}
}
else
{
ClearRequest();
}
}
Default.aspx 搜尋頁面
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default2.aspx.vb" Inherits="Default2" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>未命名頁面</title>
<script type="text/javascript" src="JS/ajax.js" language="javascript"></script>
<script type="text/javascript" language="javascript">
//秀出結果 -來自Process.aspx的 dvResult
function Fill(val,id)
{
document.getElementById(id).value=val;
ClearRequest();
}
//清空結果
function Vanish()
{
ClearRequest();
}
</script>
</head>
<body style="font-family: Tahoma; font-size: smaller;">
<form id="form1" runat="server">
<div>
<table>
<tr>
<th>
</th>
</tr>
<tr>
<td>
搜尋:<asp:TextBox ID="txtSearchText" runat="server" Width="200px"></asp:TextBox>
</td>
</tr>
<tr>
<td>
<div id="dvtxtSearchText" style="width: 100%">
</div>
</td>
</tr>
</table>
</div>
</form>
</body>
</html>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>未命名頁面</title>
<script type="text/javascript" src="JS/ajax.js" language="javascript"></script>
<script type="text/javascript" language="javascript">
//秀出結果 -來自Process.aspx的 dvResult
function Fill(val,id)
{
document.getElementById(id).value=val;
ClearRequest();
}
//清空結果
function Vanish()
{
ClearRequest();
}
</script>
</head>
<body style="font-family: Tahoma; font-size: smaller;">
<form id="form1" runat="server">
<div>
<table>
<tr>
<th>
</th>
</tr>
<tr>
<td>
搜尋:<asp:TextBox ID="txtSearchText" runat="server" Width="200px"></asp:TextBox>
</td>
</tr>
<tr>
<td>
<div id="dvtxtSearchText" style="width: 100%">
</div>
</td>
</tr>
</table>
</div>
</form>
</body>
</html>
Default.aspx.vb
Partial Class Default2
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
txtSearchText.Attributes.Add("onkeyup", "return fAJAXRequest();")
txtSearchText.Focus()
End If
End Sub
End Class
Process.aspx 回傳結果頁面
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Process.aspx.vb" Inherits="Process" %>
<html >
<body>
<div id="dvResult" style=" border-right: dimgray 1px solid; border-top: dimgray 1px solid; border-left: dimgray 1px solid; border-bottom: dimgray 1px solid;" runat="server">
</div>
</body>
</html>
<html >
<body>
<div id="dvResult" style=" border-right: dimgray 1px solid; border-top: dimgray 1px solid; border-left: dimgray 1px solid; border-bottom: dimgray 1px solid;" runat="server">
</div>
</body>
</html>
Process.aspx.vb
Imports System.Web.UI.HtmlControls
Imports System.Data.SqlClient
Partial Class Process
Inherits System.Web.UI.Page
Dim result As String
Dim xCord As String
Dim Id As String
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If Not Me.IsPostBack Then
result = ""
xCord = Request.QueryString("X").ToString
Id = Request.QueryString("Id").ToString
End If
Dim searchCrit As String = Request.QueryString("search").ToString
Dim query As String = "select top 10 * from Orders where OrderID like '" & searchCrit & "%'"
Using conn As New SqlConnection(System.Configuration.ConfigurationManager.ConnectionStrings("NorthwindConnectionString1").ConnectionString)
conn.Open()
Using command As New SqlCommand
With command
.Connection = conn
.CommandText = query
Dim ds As Data.DataSet = New Data.DataSet
Dim dt As SqlDataAdapter = New SqlDataAdapter(command)
dt.Fill(ds)
If ds.Tables(0).Rows.Count > 0 Then
result &= "<div >"
For i As Integer = 0 To ds.Tables(0).Rows.Count - 1
result &= "<div id=lp" & i & "><a href=javascript:Fill('" & ds.Tables(0).Rows(i)("OrderID").ToString & "','" & Id & "') style='text-decoration:none;'>" & _
Replace(ds.Tables(0).Rows(i)("OrderID").ToString, searchCrit, "<font color='red'>" & searchCrit & "</font>") & "</a></div>"
Next
result &= "</div>"
End If
dvResult.InnerHtml = result
End With
End Using
End Using
End Sub
End Class參考至:http://www.codeproject.com/KB/aspnet/ASP.NET___AJAX.aspx
