Ecshop ajax 局部刷新购物车功能
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.点击按钮首先执行这个函数 获取我们的数据 ecshop二次开发整理Ecshop ajax应用讨论
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层
搞定。
Ecshop ajax 局部刷新购物车功能的更多相关文章
- ajax局部刷新
//5秒刷新一次 $(function () { setInterval(Refresh, 5000); }); //ajax局部刷新 function Refresh() { $.ajax({ ty ...
- php Ajax 局部刷新
php Ajax 局部刷新: HTML部分 </head> <body> <h1>Ajax动态显示时间</h1> <input type=&quo ...
- thickbox关闭子页后ajax局部刷新父页
1. 首先注意需要调用thickbox的js <script type="text/javascript" src="<%=path%>/js/jque ...
- 实现AJAX局部刷新以及PageMethod方法的使用
<html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> &l ...
- 用户登录ajax局部刷新验证码
用户登录的时候,登录页面附带验证码图片,用户需要输入正确的验证码才可以登录,验证码实现局部刷新操作. 效果如图: 代码如下: #生成验证码及图片的函数 newcode.py import rando ...
- Ajax局部刷新(使用JS操作)
对于在不使用Ajax的情况下,使用JS来进行局部刷新,主要有如下的几步: 1. 得到XMLHttpRequest 2. 使用open方法打开连接 3. 设置请求头信息 4. 注册onreadystat ...
- Ajax 局部刷新 异步提交
AJAX简介 局部刷新,异步提交. AJAX 不是新的编程语言,而是一种使用现有标准的新方法.它最大的有点就是在不重新加载整个页面的情况下,可以与服务器交换数据并更新部分网页内容. 浏览器朝后端发送请 ...
- ajax局部刷新一个div下的jsp
用AJAX刷新一个DIV中的jsp内容 <script type="text/javascript"> var xmlhttp; function startrefre ...
- ajax局部刷新后,如何让局部中的百度分享重新加载
我这个人不怎么喜欢说太多话,看几个图你们就懂了 Ajax前 Ajax之后 原因分析 解决方法 收工 百度分享是集成了众多主流第三方网站分享和收藏按钮的工具. 通过百度分享轻松将主流第三方网站的分享按钮 ...
随机推荐
- java web项目 。classpath 文件解析
eclipse工程中.classpath文件含义: 下面是一个.classpath文件内容: < ?xml version="1.0" encoding="UTF- ...
- Sqlitekit 封装管理
最近需要用到Sqlite数据库来做一个游戏的数据存储.网上搜了一下,两种方法,一种是自己dll搭建环境有可能还需要编译之类的,我自己是搭建出来了,不过我没采用. 还有一种就是使用sqlitekit插件 ...
- java基础知识回顾之java Thread类学习(十)--线程的状态以及转化使用的方法介绍
线程的概述: 线程是程序的多个执行路径,执行调度的单位,依托于进程存在.线程不仅可以共享进程的内存,而且还拥有一个属于自己的内存空间,这段内存空间叫做线程栈,是建立线程的时候由系 ...
- https 方式使用git@osc设置密码的方式
https方式每次都要输入密码,按照如下设置即可输入一次就不用再手输入密码的困扰而且又享受https带来的极速 设置记住密码(默认15分钟): git config --global credenti ...
- POJ3267The Cow Lexicon
http://poj.org/problem?id=3267 题意 : 给你一个message,是给定字符串,然后再给你字典,让你将message与字典中的单词进行匹配,输出要删掉多少字母. 思路 : ...
- django --fields.E304 错误解决方案
今天在同一个表里,有多个不同的用户集时出现. fields.E304: Field name <field name> clashes with accessor for <fiel ...
- Python新式类和旧式类的区别
新式类是为了统一**而在2.2中开始引入的. 代码讲解 上面的例子比较明白的说明了问题. B是定义的新式类.那么输入b的时候,不论是type(b),还是b.__class__都是输出的<clas ...
- 深入浅出Java并发包—锁(Lock)VS同步(synchronized)
今天我们来探讨一下Java中的锁机制.前面我们提到,在JDK1.5之前只能通过synchronized关键字来实现同步,这个前面我们已经提到是属于独占锁,性能并不高,因此JDK1.5之后开始借助JNI ...
- cojs 简单的01串 题解报告
题意显然是求n位二进制串中不大于其逆序串,取反串,逆序取反串的所有串按字典序排序后的第k个 由于n很小,k很大所以我们可以考虑逐位确定 问题转化为了求方案数,这显然是可以用数位DP做的 设f[len] ...
- 李洪强iOS开发之OC[015]#pragma mark的使用
// // main.m // 14 - #pragma mark的使用 // // Created by vic fan on 16/7/10. // Copyright © 2016年 李 ...