手推車”功能的實(shí)現(xiàn) “手推車”是在線購物網(wǎng)站(零售)中一項(xiàng)重要的功能。本文將要探討用ASP程序?qū)崿F(xiàn)“手推車”功能的技巧。要想在網(wǎng)站上實(shí)現(xiàn)“手推車”功能,有好幾種方法,比如用Cookie、Session或者隱藏幀等。這幾種方法各有優(yōu)缺點(diǎn),這里著重討論用Cookie來實(shí)現(xiàn)“手推車”功能。 用Cookie實(shí)現(xiàn) “手推車”功能的優(yōu)缺點(diǎn) Cookie是通過服務(wù)器端CGI、腳本或者客戶端腳本把信息保存在客戶機(jī)上的,以便為服務(wù)器或客戶機(jī)再次使用這些信息提供方便。在JavaScript中有一些專門用來對Cookie進(jìn)行操作的函數(shù),如設(shè)置Cookie值的Setcookie(name,value),刪除Cookie的Deletecookie(name)等(詳細(xì)見源碼)。使用Cookie來保存“手推車”信息的優(yōu)點(diǎn)是,即使當(dāng)用戶不小心關(guān)閉了瀏覽器窗口,“手推車”中的信息也不會丟失,并且它占用很少的服務(wù)器端資源,缺點(diǎn)是必須要求用戶端瀏覽器支持Cookie并且打開它。 “手推車”包含的功能子項(xiàng) 1.把商品添加到“手推車”,就是訂購。 2.從“手推車”中刪掉已訂購的商品。 3.修改“手推車”中某一商品的數(shù)量。 4.清空“手推車”。 5.顯示,統(tǒng)計(jì)“手推車”中的商品。 往“手推車”中 添加商品 非常簡單,就是把某一商品的信息(名稱、價(jià)格、數(shù)量、折扣等)寫入Cookie即可。這里不必把商品的所有信息都寫入Cookie,只要記下商品在數(shù)據(jù)庫中編號或ID(這里用catid表示)與商品的數(shù)量就行。在顯示“手推車”信息時(shí),根據(jù)catid可以從商品數(shù)據(jù)庫中查詢出這種商品的所有具體信息。往“手推車”中添加商品的實(shí)現(xiàn)方法如下: function Addcat(catid,number){ //把商品添加到“手推車”函數(shù) if (number<=0)DeleteCookie(″mycat″+catid); //如果商品的數(shù)量少于或等于0,則刪除該商品 else SetCookie(″mycat″+catid,catid+″,″+number); //把商品ID與數(shù)量寫入Cookie var cat=window.open(″showcat.asp″,″cat″,″toolbar=no,menubar=no,location=no,status=no,width=420,height=280″); //打開一個(gè)新窗口來顯示統(tǒng)計(jì)的商品信息,即顯示“手推車”} 從“手推車”中 刪掉商品 也就是把Cookie中的該商品信息刪除掉,調(diào)用Deletecat(catid)即可。 function Deletecat(catid){ DeleteCookie(″mycat″+catid); //從Cookie中刪除 var cat=window.open(″showcat.asp″,″cat″,″toolbar=no,menubar=no,location=no,status=no,width=420,height=280″); //在CAT窗口顯示統(tǒng)計(jì)的商品信息,即刷新顯示“手推車” } 修改“手推車”中 商品的數(shù)量 原理跟往“手推車”中添加商品是一樣的,只不過把商品的數(shù)量修改成現(xiàn)在所要的數(shù)量。 顯示與統(tǒng)計(jì) “手推車”中的商品信息 顯示的效果由Showcat.asp實(shí)現(xiàn)。這里使用了ASP中Request.Cookies集合。Request.Cookies用來檢索客戶中Cookie值。我們通過遍歷 Cookies 集合中的所有 Cookie 值取出我們的“手推車”的信息,然后從中分離出商品ID與商品數(shù)量。這里使用了VBscript中的SPLIT函數(shù),SPLIT函數(shù)返回基于 0 的一維數(shù)組,其中包含指定數(shù)目的子字符串。 取出商品ID與商品數(shù)量后再根據(jù)商品ID從商品數(shù)據(jù)庫中查詢出該商品的具體信息,最后輸出商品的名稱、單價(jià)、折扣、數(shù)量和小計(jì)等,并累計(jì)商品總件數(shù)與商品總金額。 源代碼如下: Showcat.asp <html><head><title>Cat</title></head> <body> <form name=cat> <table border="1" width="360" cellspacing="0" cellpadding="3" bordercolorlight="#FFFFFF" bordercolor="#008000"> <tr> <td width="100%" colspan="5" align="center"><b>您的手推車信息</b></td> </tr> <tr> <td width="45">名稱</td> <td width="45">單價(jià)</td> <td width="45">折扣</td> <td width="45">數(shù)量</td> <td width="45">小計(jì)</td> <td width="135"> </td> </tr> [page_break] <% dim conn,rs,sqlstr,cook,catid,number,sum,allnum,i i=0 set conn=server.createobject("ADODB.CONNECTION") '建立數(shù)據(jù)庫ADO連接實(shí)例 conn.open "DSN","USERID","PWD" '打開數(shù)據(jù)庫連接 set rs=Server.CreateObject("ADODB.Recordset") '建立數(shù)據(jù)庫ADO記錄集連接實(shí)例 for each cook in request.cookies '遍歷 Cookies 集合 if instr(cook,"mycat") then '判斷是否“手推車”信息 catid=split(request.cookies(cook),",")[0] '分離出商品ID number=split(request.cookies(cook),",")[1] '分離出商品數(shù)量 sqlstr="select * from cat where id="&catid&"" 'SQL查詢語句 rs.open conn,sql,1,3 '執(zhí)行查詢,產(chǎn)生記錄集 xiaoji=rs("單價(jià)")*rs("折扣")*number '計(jì)算小計(jì) response.write "<tr><td width=45 ><font size=2 color=#800080>"&rs("名稱")&"</font></td>" response.write "<td width=45 ><font size=2 color=#800080>"&rs("單價(jià)")&"</font></td>" response.write "<td width=45 ><font size=2 color=#800080>"&rs("折扣")&"</font></td>" response.write "<td width=45 ><input type=text name=number"&i&" value="&number&" size=4></td>" response.write "<td width=45 ><font size=2 color=#800080>"&xiaoji&"</font></td>" response.write "<td width=135><input type=button value=更新 onclick=Addcat("&rs("ID")&",document.cat.number"&i&".value)> <input type=button value=刪除 onclick=Deletecat("&rs("ID")&")></td></tr> allnum=allnum+number '累計(jì)商品總件數(shù) sum=sum+xiaoji '累計(jì)總金額 rs.close i=i+1 end if next set rs=nothing set conn=nothing %> <tr> <td width="45">合計(jì)</td> <td width="45"> </td> <td width="45"> </td> <td width="45"><%=allnum%></td> <td width="45"><%=sum%></td> <td width="135"><%=sum%></td> </tr> <tr> <td width="360" colspan="6"> <font size="2"><a href="checkout.asp"><font color="#FF0000">結(jié)帳</font></a> <a href=javascript:window.close()><font color="#008000">繼續(xù)購物</font></a></font> <a href=javascript:Clearcookie()><font size="2" color="#0000FF">清空“手推車”</font></a></td> </tr> </table> </form> </body> </html> javascript中操作COOKIE的函數(shù)源碼如下: function Setcookie (name, value) { //設(shè)置名稱為name,值為value的Cookie var argc = SetCookie.arguments.length; var argv = SetCookie.arguments; var path = (argc > 3) ? argv[3] : null; var domain = (argc > 4) ? argv[4] : null; var secure = (argc > 5) ? argv[5] : false; document.cookie = name + "=" + value + ((path == null) ? "" : ("; path=" + path)) + ((domain == null) ? "" : ("; domain=" + domain)) + ((secure == true) ? "; secure" : ""); } function Deletecookie (name) { //刪除名稱為name的Cookie var exp = new Date(); exp.setTime (exp.getTime() - 1); var cval = GetCookie (name); document.cookie = name + "=" + cval + "; expires=" + exp.toGMTString(); } function Clearcookie() //清除COOKIE { var temp=document.cookie.split(";"); var loop3; var ts; for (loop3=0;loop3<temp.length;loop3++) { ts=temp[loop3].split("=")[0]; if (ts.indexOf('mycat')!=-1) DeleteCookie(ts); //如果ts含“mycat”則執(zhí)行清除 } } function getCookieVal (offset) { //取得項(xiàng)名稱為offset的cookie值 var endstr = document.cookie.indexOf (";", offset); if (endstr == -1) endstr = document.cookie.length; return unescape(document.cookie.substring(offset, endstr)); } function GetCookie (name) { //取得名稱為name的cookie值 var arg = name + "="; var alen = arg.length; var clen = document.cookie.length; var i = 0; while (i < clen) { var j = i + alen; if (document.cookie.substring(i, j) == arg) return getCookieVal (j); i = document.cookie.indexOf(" ", i) + 1; if (i == 0) break; } return null; } |
溫馨提示:喜歡本站的話,請收藏一下本站!