简单的前端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 Perfection kill 测试及答案
Mar 23 Javascript
收集的10个免费的jQuery相册
Feb 26 Javascript
javascript实现日期按月份加减
May 15 Javascript
javascript中的3种继承实现方法
Jan 27 Javascript
AngularJS入门教程之AngularJS模型
Apr 18 Javascript
MvcPager分页控件 适用于Bootstrap
Jun 03 Javascript
浅谈ng-zorro使用心得
Dec 03 Javascript
es6 filter() 数组过滤方法总结
Apr 03 Javascript
如何根据业务封装自己的功能组件
Apr 19 Javascript
解决Vue在Tomcat8下部署页面不加载的问题
Nov 12 Javascript
JS实现transform实现扇子效果
Jan 17 Javascript
微信小程序接入vant Weapp组件的详细步骤
Oct 28 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
E路文章系统PHP
2006/12/11 PHP
PHP版本常用的排序算法汇总
2015/12/20 PHP
php处理抢购类功能的高并发请求
2018/02/08 PHP
PHP的mysqli_stmt_init()函数讲解
2019/01/24 PHP
PHP实现支持CURL字符串证书传输的方法
2019/03/23 PHP
jQuery图片的展开和收缩实现代码
2013/04/16 Javascript
解决JQeury显示内容没有边距内容紧挨着浏览器边线
2013/12/20 Javascript
JQuery文本改变触发事件如聚焦事件、失焦事件
2014/01/15 Javascript
location.hash保存页面状态的技巧
2016/04/28 Javascript
jQuery EasyUI封装简化操作
2016/09/18 Javascript
jQuery实现的下雪动画效果示例【附源码下载】
2018/02/02 jQuery
新手简单了解vue
2019/05/29 Javascript
在React中写一个Animation组件为组件进入和离开加上动画/过度效果
2019/06/24 Javascript
基于vue手写tree插件的那点事儿
2019/08/20 Javascript
Vue实现点击当前元素以外的地方隐藏当前元素(实现思路)
2019/12/04 Javascript
elementui更改el-dialog关闭按钮的图标d的示例代码
2020/08/04 Javascript
Python运行的17个时新手常见错误小结
2012/08/07 Python
Python实现二叉搜索树
2016/02/03 Python
基于Django的ModelForm组件(详解)
2017/12/07 Python
python3下实现搜狗AI API的代码示例
2018/04/10 Python
python进行文件对比的方法
2018/12/24 Python
Python使用matplotlib实现交换式图形显示功能示例
2019/09/06 Python
python 读取二进制 显示图片案例
2020/04/24 Python
Python利用Xpath选择器爬取京东网商品信息
2020/06/01 Python
IE矩阵Matrix滤镜旋转与缩放及如何结合transform
2012/11/29 HTML / CSS
英国拳击装备购物网站:RDX Sports
2018/01/23 全球购物
.NET程序员的几道面试题
2012/06/01 面试题
Java基础类库面试题
2013/09/04 面试题
教你怎样写好自我评价
2013/10/05 职场文书
法制宣传月活动方案
2014/05/11 职场文书
开展批评与自我批评发言材料
2014/05/15 职场文书
船舶工程技术专业求职信
2014/08/07 职场文书
中学生爱国演讲稿
2014/09/05 职场文书
在MySQL中你成功的避开了所有索引
2022/04/20 MySQL
vue使用element-ui按需引入
2022/05/20 Vue.js
MySQL实现用逗号进行拼接、以逗号进行分割
2022/12/24 MySQL