相关商品

SEO优化型网站更多

更多

当前位置: 首页 > ecshop常见问题 > ecshop点击add to cart 无法添加购物的问题,ecshop中ajax原理

ecshop点击add to cart 无法添加购物的问题,ecshop中ajax原理

厦门松柏企业网站建设 / 2013-07-05
[] [] []

响应式外贸网页设计_soho多语种网站建设_外贸soho网站建设_营销型soho网站建设

商品点击数:4 用户评价: comment rank 5

本店售价:¥800.00元
市场价格:¥960.00元
注册用户:¥800.00元 vip:¥760.00元 分享| 暂存
购买数量:     商品总价:¥800.00元

问题: ecshop无法添加购物车

ecshop点击add to cart 无法添加购物的问题,可能是good.dwt页面没有

{insert_scripts files='transport.js'}代码。
 
下面介绍ecshop中ajax原理

例:ecshop购物实现点击购物按钮后立即更新购物车数量方案
1、比如我们category.dwt 里有
<a href='flow.php'><SPAN id='cart_count_all'>{insert name='cart_info'}</SPAN></a>

<a onclick="javascript:addToCart_xaphp({$goods.goods_id});" style="cursor: pointer;">添加购物车</a>

我们现在需要实现点击按钮后页面不刷新去更新上面购物车数量
2、首先我们需要调入系统
{insert_scripts files='transport.js,utils.js'}

这俩个js文件 是有关ajax实现效果的类问题  我们大可不去管 只需要调入 下来我们打开系统的common.js文件
进行添加我们自己的添加购物车函数
function addToCart_xaphp(goodsId, parentId)
{
var goods = new Object();
var spec_arr = new Array();
var fittings_arr = new Array();
var number = 1;
var formBuy = document.forms['ECS_FORMBUY'];
var quick = 0;
// 检查是否有商品规格
goods.quick = quick;
goods.spec = spec_arr;
goods.goods_id = goodsId;
goods.number = number;
//goods.guige = guige;
goods.parent = (typeof(parentId) == "undefined") ? 0 : parseInt(parentId);
Ajax.call('flow.php?step=add_to_cart', 'goods=' + goods.toJSONString(), addToCartResponse_xaphp, 'POST', 'JSON');
}

解释;

a.点击按钮首先执行这个函数 获取我们的数据
b. Ajax.call('flow.php?step=add_to_cart', 'goods=' + goods.toJSONString(), addToCartResponse_xaphp, 'POST', 'JSON'); 这是局部执行 也就是无刷新执行flow.php?step=add_to+cart 同时把数据通过POST提交,有关json具体原理想研究的朋友可以去网上找资料。
c、addToCartResponse_xaphp回调函数很重要.

3、以上系统内部访问flow.php 那么我们当然要去flow.php

打开flow.php 我们找到 if($_REQUEST['step'] == 'add_to_cart' ){         添加购物车的程序 }

解释:

a、我们通过POST传递了数据 在.php文件当然需要接收。首先我们要调入json处理数据文件 include_once('includes/cls_json.php');  这个文件很重要 即 js 和php 直接通过一种方式俩者进行数据交互
b、$result = array('error' => 0, 'message' => '', 'content' => '', 'goods_id' => ''); 这个也是我们常用的 默认定义数组。
c、$json  = new JSON;声明json类
d、$goods = $json->decode($_POST['goods']); 数据接收给$goods
4、 比如我们添加购物车成功 我们可以数组里定义 $result['error']=0;  就是把我们用到的数据放入$result数组
形象点 个人理解就是 通过  die($json->encode($result));数据传递给我们刚才的回调函数
下来我看回调函数的写法
function addToCartResponse_xaphp(result)
{
if (result.error > 0)
{
// 如果需要缺货登记,跳转
if (result.error == 2)
{
if (confirm(result.message))
{
location.href = 'user.php?act=add_booking&id=' + result.goods_id;
}
}
// 没选规格,弹出属性选择框
else if (result.error == 6)
{
openSpeDiv(result.message, result.goods_id, result.parent);
}
else
{
alert(result.message);
}
}
else
{
getCartNumber();
}
}
function getCartNumber(){
Ajax.call('transport.php?act=cart_number', '', getCartNumberResponse, 'GET', 'JSON');
}

解释:回调函数里我们又调用 getCartNumber()函数,在这个函数里我们又一次利用ajax查询购物车数量

transport.php代码
if($_REQUEST['act'] =='cart_number')
{
include_once('includes/cls_json.php');
//$_POST['goods'] = json_str_iconv($_GET['goods_id']);
$sql = 'SELECT SUM(goods_number) AS number, SUM(goods_price * goods_number) AS amount' .
' FROM ' . $GLOBALS['ecs']->table('cart') .
" WHERE session_id = '" . SESS_ID . "' AND rec_type = '" . CART_GENERAL_GOODS . "'";
$row = $GLOBALS['db']->GetRow($sql);
if ($row)
{
$number = intval($row['number']);
$amount = floatval($row['amount']);
}
else
{
$number = 0;
$amount = 0;
}
$json = new JSON;
$result['content'] = $number;
die($json->encode($result));
}

然后再传回回调函数
function getCartNumberResponse(result){
//alert(result.content);
var message = '('+result.content+')';
document.getElementById('cart_count_all').innerHTML = message;
}

接收数据库查询到的数量,通过innerHTML写入到 cart_count_all层  搞定。

详细地址 E-mail: manager@web-song.com
© 2005-2021 厦门松柏建站 版权所有,并保留所有权利。