css&javascript jquery使用ajax連結資料庫應用
這篇下筆前滿猶豫的
並不會難寫,只是其中運用到的概念
及牽涉到的撰寫有點複雜,不知怎麼清楚表達
而且應該會有很多程式碼…
總之,就寫嘍~~~~~
目的如下:
使用者輸入條件按下送出後後,頁面不做切換
利用ajax替換網頁下方的<div>標籤,結果如下圖
看起來很普通,其實背後運作頗為難搞的:
一、要把資料庫連結端寫好,以參考的方式引入
二、撰寫ashx泛式,使用者輸入的資訊傳給泛式後,泛式會再回傳結果
三、最後撰寫jquery網頁
有三件事要做,一件件來。
*資料庫端的資料需自行建立*
如此就完成第1步了,接著在主要的專案內引入參考就好
並不會難寫,只是其中運用到的概念
及牽涉到的撰寫有點複雜,不知怎麼清楚表達
而且應該會有很多程式碼…
總之,就寫嘍~~~~~
目的如下:
使用者輸入條件按下送出後後,頁面不做切換
利用ajax替換網頁下方的<div>標籤,結果如下圖
看起來很普通,其實背後運作頗為難搞的:
一、要把資料庫連結端寫好,以參考的方式引入
二、撰寫ashx泛式,使用者輸入的資訊傳給泛式後,泛式會再回傳結果
三、最後撰寫jquery網頁
有三件事要做,一件件來。
*資料庫端的資料需自行建立*
一、要把資料庫連結端寫好,以參考的方式引入
這部份運用到之前寫過的NWDB,可以參考這裡
簡單來說就是撰寫好一個cs檔,建置後再將檔案引入
這麼做的好處是什麼呢?
1.可以客製化,連線上能夠更針對性的設計
2.將網頁端與資料庫後端連線切割,方便後續管理
*這邊會將資料庫故意沿遲一秒,以做出「資料處理中」的效果*
*這邊會將資料庫故意沿遲一秒,以做出「資料處理中」的效果*
程式碼如下:
public class NWDB
{
//全域變數,下面的SearchCustomer()會用到
SqlConnection cnn;
//建構子(建立資料庫連線)
public NWDB()
{
cnn = new SqlConnection("server=localhost;database=中文北風;UID=SQLUser;PWD=1234");
}
//帶參數的建構子()
public NWDB(string Acccount,string Password)
{
SqlConnectionStringBuilder scsb = new SqlConnectionStringBuilder();
scsb.DataSource = "localhost";
scsb.InitialCatalog = "中文北風";
scsb.UserID = Acccount;
scsb.Password = Password;
scsb.IntegratedSecurity = false;
cnn = new SqlConnection(scsb.ConnectionString);
}
//主要的搜尋方法,用來找出目標
public DataTable SearchCustomer(string customerId)
{
//WAITFOR DELAY '00:00:01' 等候1秒再做下一個指令
SqlCommand cmd = new SqlCommand("WAITFOR DELAY '00:00:01' SELECT 客戶編號,公司名稱,連絡人,連絡人職稱,地址 FROM 客戶 WHERE 公司名稱 LIKE '%'+@cname+'%'", cnn);
cmd.Parameters.Add("@cname", SqlDbType.VarChar).Value = customerId;
cnn.Open();
SqlDataReader mydr = cmd.ExecuteReader();
DataTable tt = new DataTable();
tt.Load(mydr);
mydr.Close();
cmd.Dispose();
cnn.Close();
return tt;
}
}
如此就完成第1步了,接著在主要的專案內引入參考就好
二、撰寫ashx泛式,使用者輸入的資訊傳給泛式後,泛式會再回傳結果
這也是切割網頁程式端,一樣也是方便維護
若日後在別的網頁有相同需求,就不需要再另外撰寫
可以直接連接到這個ashx網頁即可取得結果
若日後在別的網頁有相同需求,就不需要再另外撰寫
可以直接連接到這個ashx網頁即可取得結果
程式碼如下:
public void ProcessRequest(HttpContext context)
{
//抓出網頁丟過來的值
string cname = context.Request.QueryString["cname"];
//引入NWDB
NWDB.NWDB nwdb = new NWDB.NWDB();
DataTable tt = nwdb.SearchCustomer(cname);
StringBuilder sb = new StringBuilder();
//要取ID名,在網頁端會會針對這個表格用CSS撰寫變化
sb.Append("<table id='ResultList'>");
sb.Append("<thead>");
sb.Append("<tr>");
//放入表格標題
for (int i = 0; i < tt.Columns.Count; i++)
sb.Append(String.Format("<td align='center'>{0}</td>", tt.Columns[i].ColumnName));
sb.Append("</tr>");
sb.Append("</thead>");
sb.Append("<tbody>");
//放入表格內容
foreach (DataRow rr in tt.Rows)
{
sb.Append("<tr>");
for (int i = 0; i < tt.Columns.Count; i++)
sb.Append(String.Format("<td align='center'>{0}</td>",rr[i]));
sb.Append("</tr>");
}
sb.Append("</tbody>");
sb.Append("</table>");
//將寫好的HTML表格回傳給網頁
context.Response.Write(sb.ToString());
}
三、撰寫jQuery網頁
接下來就簡單啦,傳統的javascript寫ajax真的很麻煩
利用jquery就簡單多了,短短幾行就能做到一樣的效果
要實現的功能有:
一、傳出使用者的輸入,並接回
二、運用jquery結合css產生表格變化的效果,可參考這篇
三、在資料傳輸中按鈕不能按並顯示傳輸狀態,回傳結束後才可再按
利用jquery就簡單多了,短短幾行就能做到一樣的效果
要實現的功能有:
一、傳出使用者的輸入,並接回
二、運用jquery結合css產生表格變化的效果,可參考這篇
三、在資料傳輸中按鈕不能按並顯示傳輸狀態,回傳結束後才可再按
程式碼如下:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<script src="../scripts/jquery-1.11.1.min.js"></script>
<style type="text/css">
#AjaxProcessingDiv { display:none; }
</style>
<script type="text/javascript">
$(document).ready(function () {
$("#Btn1").click(function () {
//按下按鈕時的事件
$("#AjaxProcessingDiv").show();//顯示正在處理
$("#Btn1").attr("disabled", "disabled");//將按鈕隱藏
$("#ResultDiv").empty();//清空div的資料
// $.param是jquery很好用的變數整理
var vv = $.param({ cname: $("#T1").val(), tt: new Date().getTime()});
//使用ajax的方法$.get(url,變數,結束後會呼叫的事件,格式)
$.get("/Data/AjaxSearchCustomerService.ashx"
, vv
, function (xx) { //xx是url傳回的結果
$("#ResultDiv").html(xx);
$("#ResultList").css({ "width": "800px", "border-spacing": "0px" });
$("#ResultList td").css("padding", "10px");
$("#ResultList thead").css({ "background-color": "#bf740b", "color": "white", "font-weight": "bold" });
$("#ResultList tbody tr:even").css("background-color", "#f7f7b9").hover(
function () { $(this).css("background-color","#00ffff") },
function () { $(this).css("background-color", "#f7f7b9") }
);
$("#ResultList tbody tr:odd").css("background-color", "#ffffff").hover(
function () { $(this).css("background-color", "#00ffff") },
function () { $(this).css("background-color", "#ffffff") }
);
//處理完畢,btm1要再次可以按
$("#Btn1").removeAttr("disabled");
//把轉圈圈的圖及提示隱藏
$("#AjaxProcessingDiv").hide();
}
, "html");
});
});
</script>
</head>
<body>
<h1>Ajax頁面</h1>
<table>
<tr>
<td>公司名稱</td>
<td><input type="text" id="T1" /> </td>
<td><input id="Btn1" type="button" value="呼叫Ajax" /></td>
<td><div id="AjaxProcessingDiv" >
<img src="/images/Loading1.gif" />
資料處理中...
</div></td>
</tr>
</table>
<p><div id="ResultDiv"></div></p>
</body>
</html>


作者已經移除這則留言。
回覆刪除請問是否可以詢問相關問題呢?
回覆刪除