Magento Ajax购物车在删除重定向到删除页面

时间:2016-04-18 05:29:22

标签: php jquery ajax magento-1.9

当我想从AJAX购物车中逐个删除1个以上的产品时,对于第1个产品,它的工作正常但是当我尝试删除另一个产品时,它重定向的页面会删除页面URL (SiteURL/checkout/cart/delete/id/012/uenc/aHR0cDovLzEyMi)

并显示一些json或html数据,例如{"message":"Item was removed.","update_blocks":[{"key":".header .links","value":"<div class=\"links\"> ....

从购物车功能删除项目deleteAction()

public function deleteAction() {
        $id = (int) $this->getRequest()->getParam('id');
        if ($id) {
            try {
                $this->_getCart()->removeItem($id)
                        ->save();
            } catch (Exception $e) {
                $_response = Mage::getModel('ajaxcart/response');
                $_response->setError(true);
                $_response->setMessage($this->__('Cannot remove the item.'));
                $_response->send();
                Mage::logException($e);
            }
        }
        $_response = Mage::getModel('ajaxcart/response');
        $_response->setMessage($this->__('Item was removed.'));
        //append updated blocks
        $this->getLayout()->getUpdate()->addHandle('ajaxcart');
        $this->loadLayout();
        $_response->addUpdatedBlocks($_response);
        $_response->send();
    }

如果能得到一些帮助,我将非常感激。提前谢谢。

1 个答案:

答案 0 :(得分:4)

我得到了一个解决方案,它与 Javascript绑定问题 相关。问题是,当您从购物车中删除产品时,所有购物车块都会更新。因此,它删除已绑定的JavaScript。

我在 ajaxcart.js 中的 updateBlocks函数末尾添加了javascript绑定代码。

因此,每当用户尝试从购物车中删除某个项目时,ajax代码就会被执行,即使在最初的javascript绑定之后,响应update_blocks 也会再次绑定到购物车。

添加了Javascript绑定代码

$$('a[href*="/checkout/cart/delete/"]').each(function (e) {    
            $(e).observe('click', function (event) {    
                setLocation($(e).readAttribute('href'));    
                Event.stop(event);    
            });    
        });

将代码添加到 ajaxcart.js updateBlocks 后看起来像,

updateBlocks: function (blocks) {    
        var _this = this;
        if (blocks) {    
            try {    
                blocks.each(function (block) {    
                    if (block.key) {    
                        var dom_selector = block.key;    
                        if ($$(dom_selector)) {    
                            jQuery(block.key, parent.document).each(function (e) {    
                                jQuery(this).html(block.value);    
                            });    
                        }    
                    }    
                });    
                _this.bindEvents();    
                _this.bindNewEvents();    
                // show details tooltip    
                truncateOptions();    
            } catch (e) {    
                console.log(e);    
            }    
        }    
        $$('a[href*="/checkout/cart/delete/"]').each(function (e) {    
            $(e).observe('click', function (event) {    
                setLocation($(e).readAttribute('href'));    
                Event.stop(event);    
            });    
        });    
    }