Ecshop ajax 局部刷新購物車功能

一、好比咱們category.dwt 裏有javascript

<a href='flow.php'><SPAN id='cart_count_all'>{insert name='cart_info'}</SPAN></A>  php

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

  咱們如今須要實現點擊按鈕後頁面不刷新去更新上面購物車數量    ajax

二、首先咱們須要調入系統sql

{insert_scripts files='transport.js,utils.js'}  數據庫

       這倆個js文件 是有關ajax實現效果的類問題  咱們大可不去管 只須要調入 下來咱們打開系統的common.js文件json

     進行添加咱們本身的添加購物車函數數組

  function addToCart_xaphp(goodsId, parentId) {session

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回調函數很重要.

  三、以上系統內部訪問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

  四、 好比咱們添加購物車成功 咱們能夠數組裏定義 $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層 

搞定。

相關文章
相關標籤/搜索