简单的前端js+ajax 购物车框架(入门篇)


Posted in Javascript onOctober 29, 2011

今天在公司实在没有事做,突然就想到写下商城的购物车的前端框架,当然我这里只有购物车的增删改查,也许写的并不是那么完善,但最重要的是一个入门,也希望js达人给些建议,好让我更上一个台阶。
HOHO~~~开始咯:
Js:

//为了省事,就没写自己的js ajax了 用了jquery的,当然你也可以添加到jquery的扩展方法内,哈哈,我太懒了,所以就写这里了。 
var _$ = { AJAX: function (urlparm, d, beforecall, successcall) { 
$.ajax({ 
url: "ashx/ajax_shoppingCart.ashx?" + urlparm, 
data:d, 
dataType:"Json", 
type: "POST", 
before: beforecall, 
success:successcall 
}); 
} 
}; 
(function () { 
var Jusoc = {}; 
Jusoc = { 
_inital: function () { window.Jusoc = Jusoc; }, 
Base: {}, 
DAO: {}, 
BLL: {}, 
UI: {} 
} 
Jusoc.Base = { 
Validate: { 
} 
} 
//AJAX() 
Jusoc.DAO = { 
Shopping: { 
Get: function (beforecall, successcall) { 
_$.AJAX("action=get", null, beforecall, successcall); 
}, 
Remove: function (pid, beforecall, successcall) { 
_$.AJAX("action=remove", { "pid": pid }, beforecall, successcall); 
}, 
Add: function (pid, pcount, beforecall, successcall) { 
_$.AJAX("action=add", { "pid": pid, "pcount": pcount }, beforecall, successcall); 
}, 
Set: function (pid, pcount, beforecall, successcall) { 
_$.AJAX("action=set", { "pid": pid, "pcount": pcount }, beforecall, successcall); 
} 
} 
} 
Jusoc.BLL = { 
Shopping: (function () { 
var Data = null; 
var isLock = false; 
var _successcall = null; 
var _beforecall = null; 
function Unlock() { 
isLock = false; 
} 
function Lock() { 
isLock = true; 
if(Data&&Data !=null) 
{ 
Data = null; 
} 
} 
function CallBackFunction(xhr) { 
Unlock(); 
// if (xhr[0] == "ERROR") { 
// alert(xhr[1]); 
// return; 
// } 
// else if (xhr[0] == "SUCCESS") { 
// Jusoc.BLL.Shopping.SetData(xhr[1]); 
// } 
Jusoc.BLL.Shopping.SetData(xhr); 
if (_successcall != null && _successcall) { 
_successcall.call(window, xhr); 
} 
_successcall = null; 
} 
function PrepareRequst(beforecall, successcall) { 
if (isLock) { 
return false; 
} 
Lock(); 
if (beforecall != null && beforecall) { 
_beforecall = beforecall; 
} 
if (successcall != null && successcall) { 
_successcall = successcall; 
} 
} 
return { 
Get: function (beforecall, successcall) { 
if(PrepareRequst(beforecall, successcall)==false)return false; 
Jusoc.DAO.Shopping.Get(_beforecall, CallBackFunction); 
}, 
Remove: function (pid, beforecall, successcall) { 
if(PrepareRequst(beforecall, successcall)==false)return false; 
Jusoc.DAO.Shopping.Remove(pid, _beforecall, CallBackFunction); 
}, 
Set: function (pid, pcount, beforecall, successcall) { 
if(PrepareRequst(beforecall, successcall)==false)return false; 
Jusoc.DAO.Shopping.Set(pid, pcount, beforecall, CallBackFunction); 
}, 
Add: function (pid, pcount, beforecall, successcall) { 
if(PrepareRequst(beforecall, successcall)==false)return false; 
Jusoc.DAO.Shopping.Add(pid, pcount, _beforecall, CallBackFunction); 
}, 
GetData: function () { 
//alert(Data); 
return Data; 
}, 
SetData: function (data) { Data = data; }, 
RemoveData: function () { 
if (Data != null && Data) 
Data= null; 
} 
} 
})(), 
XHR: { 
} 
} 
Jusoc.UI = { 
ShoppingCart: (function () { 
function Constract() { 
Jusoc.BLL.Shopping.Get(null,SetShoppingCart); 
} 
function SetShoppingCart(data) { 
//这里来填充购物车中的数据 
var data = Jusoc.BLL.Shopping.GetData(); 
//这里 先构建 整个的购物车 
var html = "<table class=\"shoppingcart-list\" id=\"sm\">"+ 
"<tr>"+ 
"<th>"+ 
"书啊"+ 
"</th>"+ 
"<th>"+ 
"书名"+ 
"</th>"+ 
"<th>"+ 
" 单价"+ 
"</th>"+ 
"<th>"+ 
" 数量"+ 
"</th>"+ 
"<th>"+ 
" 操作"+ 
"</th>"+ 
"</tr>"; 
for(var i =0;i<data.length;i++) 
{ 
html += "<tr>"+ 
"<td>"+ 
"<img src=\"ss\" height=\"36px\" width=\"28px\"/>"+ 
"</td>"+ 
"<td>"+ 
data[i].Name+ 
"</td>"+ 
"<td>"+ 
"¥"+data[i].Money+ 
"</td>"+ 
"<td>"+ 
"<div class=\"item-change\">"+ 
"<input type=\"text\" value='"+data[i].Count+"' />"+ 
"<span title=\"数量加一\" class=\"add\" onclick=\"Jusoc.UI.ShoppingCart.Plus(1,this.parentNode.childNodes[0].value,this.parentNode.childNodes[0])\"></span> <span "+ 
"title=\"数量减一\" class=\"cut\" onclick=\"Jusoc.UI.ShoppingCart.Minus(1,this.parentNode.childNodes[0].value,this.parentNode.childNodes[0])\"></span>"+ 
"</div>"+ 
"</td>"+ 
"<td>"+ 
"<span class=\"RemoveLink\" onclick=\"Jusoc.UI.ShoppingCart.Remove(1,this.parentNode.parentNode)\">Remove From Cark</span>"+ 
"</td>"+ 
"</tr>"; 
} 
html+="</table>"; 
document.body.innerHTML+=html; 
} 
function AddToPanel(data) { 
//这里是对 添加一个商品到购物车 来修改前台样式 
var obj = document.getElementById("sm"); 
var html = "<td>"+ 
"<img src=\"soo\" height=\"36px\" width=\"28px\"/>"+ 
"</td>"+ 
"<td>"+ 
data.Name+ 
"</td>"+ 
"<td>"+ 
"¥"+data.Money+ 
"</td>"+ 
"<td >"+ 
"<div class=\"item-change\">"+ 
"<input type=\"text\" value='"+data.Count+"' />"+ 
"<span title=\"数量加一\" class=\"add\" onclick=\"Jusoc.UI.ShoppingCart.Plus(1,this.parentNode.childNodes[0].value,this.parentNode.childNodes[0])\"></span> <span "+ 
"title=\"数量减一\" class=\"cut\" onclick=\"Jusoc.UI.ShoppingCart.Minus(1,this.parentNode.childNodes[0].value,this.parentNode.childNodes[0])\"></span>"+ 
"</div>"+ 
"</td>"+ 
"<td>"+ 
"<span class=\"RemoveLink\" onclick=\"Jusoc.UI.ShoppingCart.Remove(1,this.parentNode.parentNode)\">Remove From Cark</span>"+ 
"</td>"; 
var row = obj.insertRow(1); 
row.innerHTML = html; 
return; 
obj.childNodes[0].innerHTML += html; 
} 
function UpdatePanel(obj, count) { 
//这里是从购物车中 增加 或者 减少 修改操作 
obj.value = count; 
} 
function RemoveFromPanel(child) 
{ 
var obj = document.getElementById("sm"); 
obj.childNodes[0].removeChild(child); 
} 
return { 
PageLoad: function () { 
Constract(); 
}, 
Add: function (pid, pcount) { 
Jusoc.BLL.Shopping.Add(pid,pcount, null, AddToPanel); 
}, 
Plus: function (pid, pcount, obj) { 
pcount = parseInt(pcount) + 1; 
Jusoc.BLL.Shopping.Set(pid, pcount, function () { alert("before") }, function (data) { UpdatePanel(obj, pcount) }); 
}, 
Minus:function(pid,pcount,obj){ 
pcount = parseInt(pcount) - 1; 
Jusoc.BLL.Shopping.Set(pid,pcount,null,function(data){ UpdatePanel(obj,pcount)}); 
}, 
Remove:function(pid,obj){ 
Jusoc.BLL.Shopping.Remove(pid,null,function(data){ RemoveFromPanel(obj);}); 
} 
} 
})() 
} 
Jusoc._inital(); 
})()

Tips:这里的显示页面仅仅是demo,如需要,可以自己定制。

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> 
<title></title> 
<style type="text/css"> 
*{margin:0; padding:0;border:0} 
body{font-size: .85em;font-family: Verdana,Helvetica,SimSun,Arial, "Arial Unicode MS" ,MingLiu,PMingLiu, "MS Gothic" ,sans-serief;color: #232323;text-align:center; font-size:12px; background-color: #fff;} 
#ltRight {width: 722px;float: left;position: relative;padding: 16px 40px;text-align:left} 
/*shoppingcart-list*/ 
.shoppingcart-list{border: 1px solid #C2D8ED;border-collapse: collapse;color: #666666;width: 750px;} 
.shoppingcart-list th{background-color: #F1F7F9;color: #666;font-size: 13px;text-align: center;} 
.shoppingcart-list tr{border: 1px solid #C2D8ED;line-height: 25px;text-align:center;} 
.shoppingcart-list tr:hover{background-color: #fff;} 
th, td{padding-left: 5px;} 
.item-change{font: 12px/74px Arial;text-align: center;width: 58px;padding: 28px 0 0 25px;height: 46px;} 
.item-change input{width: 36px;height: 19px;border: 1px solid #C4C4C4;background: white;float: left;margin-top: 1px;text-align: center;line-height: 19px;margin-right: 1px;font-size: 12px;} 
.item-change span{width: 17px;height: 8px;float: left;display: block;margin-top: 1px;font-size: 0;line-height: 0;border: 1px solid #C9C9C9;text-indent: -9999px; cursor:pointer} 
.item-change .add{background: url(Images/leftmenu/icon_cart.gif) no-repeat 6px -58px;} 
.item-change .cut{background: url(Images/leftmenu/icon_cart.gif) no-repeat 6px -67px;} 
.box_window {width: 204px;position:absolute;left:-9999px;} 
.box_window .updateTip{width: 184px;border: solid 1px #DFC9B2;background-color: #FDF2E3;line-height: 20px;padding: 11px 8px 8px;} 
.t_c {text-align: center;} 
.c_red_s {color: #C30;font-weight: bold;} 
.box_window .c_b {width: 9px;height: 6px;margin: 0 auto;background: url(Images/leftmenu/p_window_b.gif) no-repeat;position: relative;margin-top: -1px;font-size: 0;overflow: hidden;} 
.RemoveLink{ cursor:pointer} 
</style> 
<script src="../js/jquery-1.6.js" type="text/javascript"></script> 
<script src="Js/base.Jusoc.js" type="text/javascript"></script> 
<script type="text/javascript"> 
window.onload =function () { 
Jusoc.UI.ShoppingCart.PageLoad(); 
} 
</script> 
</head> 
<body> 
<div id="ltRight"> 
<h5 class="htitle"> 
购物车 
<span style="float:right; padding-right:20px;">总金额:¥<em id="cart-total"></em></span> 
</h5> 
<div id="update-message" style="text-align: left; text-indent: 48px; font-weight: bold; 
padding: 6px;"> 
</div> 
<div id="item-tip" class="box_window"> 
<div class="updateTip"> 
<p class="t_c"> 
修改成功!</p> 
<p> 
您的商品总金额为¥<span class="c_red_s" id="update_total_account">@Model.Total.ToString("0.00")</span>元</p> 
<p class="t_c"> 
<a href="javascript:void(0)" onclick="$('#item-tip').css('left','-9999px');">关闭</a></p> 
</div> 
<div class="c_b"> 
</div> 
</div> 
<h5><a href="javascript:Jusoc.UI.ShoppingCart.Add(1,1)">Add one to Shopping Cart</a></h5> 
</div> 
</body> 
</html>

ashx:这个我就不就木有必要黏贴出来了,根据自己的业务去写额。

总结:OK,搞定!!

Javascript 相关文章推荐
JavaScript下申明对象的几种方法小结
Oct 02 Javascript
整理一些JavaScript的IE和火狐的兼容性注意事项
Mar 17 Javascript
jquery插件实现鼠标经过图片右侧显示大图的效果(类似淘宝)
Feb 04 Javascript
单击浏览器右上角的X关闭窗口弹出提示的小例子
Jun 12 Javascript
JS+CSS实现实用的单击输入框弹出选择框的方法
Feb 28 Javascript
jquery+html5制作超酷的圆盘时钟表
Apr 14 Javascript
jQuery实现的鼠标经过时变宽的效果(附demo源码)
Apr 28 Javascript
JS判断是否在微信浏览器打开的简单实例(推荐)
Aug 24 Javascript
Chrome浏览器的alert弹窗禁止再次弹出后恢复的方法
Dec 30 Javascript
ES6生成器用法实例分析
Apr 10 Javascript
详解React开发中使用require.ensure()按需加载ES6组件
May 12 Javascript
JS实现移动端触屏拖拽功能
Jul 31 Javascript
分享一个自己写的table表格排序js插件(高效简洁)
Oct 29 #Javascript
Json2Template.js 基于jquery的插件 绑定JavaScript对象到Html模板中
Oct 29 #Javascript
基于jQuery的输入框在光标位置插入内容, 并选中
Oct 29 #Javascript
基于jquery的无限级联下拉框js插件
Oct 29 #Javascript
对setInterval在火狐和chrome切换标签产生奇怪的效果之探索,与解决方案!
Oct 29 #Javascript
仿猪八戒网左下角的文字滚动效果
Oct 28 #Javascript
js实现双向链表互联网机顶盒实战应用实现
Oct 28 #Javascript
You might like
PHP PDOStatement对象bindpram()、bindvalue()和bindcolumn之间的区别
2014/11/20 PHP
php对象在内存中的存在形式分析
2015/02/03 PHP
PHP对象相关知识总结
2017/04/09 PHP
[IE&amp;FireFox兼容]JS对select操作
2007/01/07 Javascript
解决ExtJS在chrome或火狐中正常显示在ie中不显示的浏览器兼容问题
2013/01/11 Javascript
jquery easyui 结合jsp简单展现table数据示例
2014/04/18 Javascript
jQuery找出网页上最高元素的方法
2015/03/20 Javascript
JS中字符串trim()使用示例
2015/05/26 Javascript
ExtJs动态生成treepanel的Json格式
2015/07/19 Javascript
JS随机打乱数组的方法小结
2016/06/22 Javascript
Javascript this 函数深入详解
2016/12/13 Javascript
jQuery中hover方法搭配css的hover选择器,实现选中元素突出显示方法
2017/05/08 jQuery
node作为中间服务层如何发送请求(发送请求的实现方法详解)
2018/01/02 Javascript
在webstorm开发微信小程序之使用阿里自定义字体图标的方法
2018/11/15 Javascript
jQuery实现上下滚动公告栏详细代码
2018/11/21 jQuery
CountUp.js数字滚动插件使用方法详解
2019/10/17 Javascript
JS 数组和对象的深拷贝操作示例
2020/06/06 Javascript
python数据结构之链表的实例讲解
2017/07/25 Python
Django实现简单分页功能的方法详解
2017/12/05 Python
Python操作mongodb数据库进行模糊查询操作示例
2018/06/09 Python
python生成带有表格的图片实例
2019/02/03 Python
Python matplotlib画图与中文设置操作实例分析
2019/04/23 Python
tensorflow之自定义神经网络层实例
2020/02/07 Python
Python3自定义http/https请求拦截mitmproxy脚本实例
2020/05/11 Python
什么是python的id函数
2020/06/11 Python
使用OpenCV实现人脸图像卡通化的示例代码
2021/01/15 Python
一款超酷的js+css3实现的3D标签云特效兼容ie7/8/9
2013/11/18 HTML / CSS
Ibood荷兰:互联网每日最佳在线优惠
2019/02/28 全球购物
eBay奥地利站:eBay.at
2019/07/24 全球购物
励志演讲稿500字
2014/08/21 职场文书
解放思想大讨论活动心得体会
2014/09/11 职场文书
工作业绩不及格检讨书
2014/10/28 职场文书
幼儿园教师求职信
2015/03/20 职场文书
2016幼儿园教师年度考核评语
2015/12/01 职场文书
「约定的梦幻岛」作画发布诺曼生日新绘
2022/03/21 日漫
Python开发五子棋小游戏
2022/04/28 Python