AJAX更新购物车数据

2016-07-07 14:55 来源:www.chinab4c.com 作者:ecshop专家



先贴出2个图





第一个图可以同时更新积分和价格,当然积分和人民币只能一种支付类型,第二个图是很多大众的需要了。

1.先编写js函数,该函数还有很多地方可以优化比如最大购买数量,一种的固定的最大数量,一种的以库存为准,在此没有主要的**

/*
* 通过AJAX使商品购物车页面数量增加的同时价格也变化函数 liangfang add
* act 增加还是减少 rec_id 购物车idmaxnumber 每次最大购买量 可略 ,total 总量,maxnumber,total
*/
function update_cart_num(act,rec_id)
{
var num_id='goods_number_'+rec_id;//被改变数量的商品
var num = document.getElementById(num_id);

if( (!Utils.isInt(num.value)))
return;

else
{
if(act=="increase"){
num.value = parseInt(num.value) + 1;
if(num.value>=99)num.value=99;
}
else if(act=="reduce"){
num.value = parseInt(num.value) - 1;
if(num.value<=1)num.value=1;
}
Ajax.call('flow.php?step=update_cart', 'goods_number['+rec_id+']= ' + num.value, updateCartResp**e, 'POST', 'TEXT'); // liangfang edit

}
}

function updateCartResp**e(result){
var res=eval('('+result+')');//转化字符串为json对象
var num_id='goods_number_'+res.rec_id;//被改变数量的商品
var num = document.getElementById(num_id);
var subtotal_id='subtotal_'+res.rec_id;//被改变数量商品的小计金额
var subtotal = document.getElementById(subtotal_id);
var shopping_money = document.getElementById("shopping_money");
//var market_price_desc = document.getElementById("market_price_desc");//暂时不需要市场价

var integral_id='integral_'+res.rec_id;//被改变数量商品的积分,(该商场不能积分和人民币同时使用 )
var integral = document.getElementById(integral_id);
if(res.err_msg==1){
num.value=1;
Ajax.call('flow.php?step=update_cart', 'goods_number['+rec_id+']= ' + num.value, updateCartResp**e, 'POST', 'TEXT'); // liangfang edit

}
else{
if(integral===null)
{
subtotal.innerHTML=res.subtotal;//此处不是很理想,应该返回一个标准的形如:¥ 100.00左右的字符串
shopping_money.innerHTML=res.shopping_money;
}
else
integral.innerHTML=res.integral+'积分';
}
}

不需要积分部分的内容大家可以删除掉,或和我索取

2.flow.php 文件的修改。不需要积分的可以注释掉

/*------------------------------------------------------ */
//-- 更新购物车
//-- 改用AJAX方式更新购物车 liangfang edit 20120810
/*------------------------------------------------------ */

elseif ($_REQUEST['step'] == 'update_cart')
{
include('includes/cls_json.php');
$json= new JSON;
$res = array('err_msg' => '', 'rec_id' => '','subtotal'=> '','shopping_money'=> '','shopping_money'=> 'market_price_desc');
$_POST['goods_number'] = json_str_iconv($_POST['goods_number']);
//$_POST['goods_number']=$json->object_to_array($_POST['goods_number']);
if (isset($_POST['goods_number'])&& is_array($_POST['goods_number']))
{
//经过修改该函数,该函数会返回小计金额,失败返回0
if(!flow_update_cart($_POST['goods_number'])){
$res['err_msg']=1;
$res['rec_id']=key($_POST['goods_number']);//获得这个数组的键值
}
else{
$cart=flow_update_cart($_POST['goods_number']);
$res['rec_id']=key($_POST['goods_number']);//获得这个数组的键值
$res['subtotal']=$cart['subtotal'];
$res['shopping_money']=sprintf($_LANG['shopping_money'], $cart['shopping_money']);
$res['integral']=$cart['integral'];//积分
$res['market_price_desc']=sprintf($_LANG['than_market_price'], $cart['formated_market_price'], $cart['formated_saving'], $cart['save_rate']);
$res['err_msg']=0;
}
die($json->encode($res));

}

}
其中对其中的一个函数进行了修改:flow_update_cart 这个函数内容比较多,我只能把修改部分贴出来。其中有一个判断是购物车大于0的情况,加在这个if判断最后就行


/***liangfang add start***/

$order = flow_order_info();

/* 取得购物类型 */
$flow_type = isset($_SESSION['flow_type']) ? intval($_SESSION['flow_type']) : CART_GENERAL_GOODS;
$cart_goods = cart_goods($flow_type); // 取得商品列表,计算合计
$c**ignee = get_c**ignee($_SESSION['user_id']);
/*
* 计算订单的费用
*/
$total = order_fee($order, $cart_goods, $c**ignee);
$update_cart['shopping_money']=$total['formated_goods_price'];//购物车总价
$update_cart['formated_market_price']= $total['formated_market_price'];//市场价格
$update_cart['formated_saving']=$total['formated_saving'];//节省价格
$update_cart['save_rate']=$total['save_rate'];//节省百分比
$update_cart['subtotal']= price_format($goods_price*$val, false);//购物车每件商品的小计数据 liangfang edit
$update_cart['integral']=$total['integral'];//获得积分
/***liangfang add end***/

3.对flow.dwt 模板的修改

<!-- {if $goods.goods_id gt 0 && $goods.is_gift eq 0 && $goods.parent_id eq 0} 普通商品可修改数量 -->
<input type="text" name="goods_number[{$goods.rec_id}]" id="goods_number_{$goods.rec_id}" value="{$goods.goods_number}" size="4" class="f_l B_input" style="margin-left:15px; height:20px; line-height:20px; text-align:center" />
<div class="f_l flow_arrow">
<a href="javascript:void(0);"><div class="flow_goods_up"></div></a>
<a href="javascript:void(0);"><div class="flow_goods_down"></div></a>
</div>
<!-- {else} -->
{$goods.goods_number}
<!-- {/if} -->
</td>
<!---{if $goods.sub_integral}是否有积分商城的商品--->
<td align="center" id="integral_{$goods.rec_id}" bgcolor="#ffffff">{$goods.sub_integral}积分</td>
<!---{else}--->
<td align="center" id="subtotal_{$goods.rec_id}" bgcolor="#ffffff">{$goods.subtotal}</td>
<!--{/if}-->
主要是对标签ID的控制盒函数的触发,主要我们就完成了全部AJAX来更新购物车的需求了。
不明白的地方可以加我QQ 9468802

回答:
贴图都没看见也不知道什么情况 代码还一大堆 更不看了