【问题标题】:Magento Ajax cart On delete redirect to Delete pageMagento Ajax 购物车在删除时重定向到删除页面
【发布时间】:2016-04-18 05:29:21
【问题描述】:

当我想从 AJAX 购物车中逐一删除超过 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();
    }

如果我能得到一些帮助,我将不胜感激。提前致谢。

【问题讨论】:

  • 请提供ajax响应。
  • @Shivanand 当我尝试删除第二个产品时,页面将重定向到删除显示 JSON 消息“项目已删除”的页面,在页面“update_blocks”和分页符上打印所有 JSON。在页面上打印 ajax 响应 ---->> {"message":"Item was removed.","update_blocks":[{"key":".header .links","value":"
    ....
  • 请在文件 app/code/local/Mage/Checkout/controllers/CartController.php 或 app/code/core/Mage/Checkout/controllers/CartController.php 和 ajaxDeleteAction 函数中提供代码。
  • @Shivanand 删除功能运行良好。仅在第二个产品删除时删除页面上的重定向存在问题。我认为它与 JS 无关,与 PHP 文件有关。你怎么看???
  • 如果您检查两个产品的删除 url,则 url 操作是 ajaxDelete。当您单击该 url 时,它会使用 ajax 删除产品并重新加载执行 minicart 块并使用 ajax 加载它。完成后,删除 url 必须像“domain.com/checkout/cart/ajaxDelete/id/29/uenc/xxxxx”而不是“SiteURL/checkout/cart/delete/id/012/uenc/aHR0cDovLzEyMi”。此网址将使用 php 代码。

标签: php jquery ajax magento-1.9


【解决方案1】:

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

我在 ajaxcart.jsupdateBlocks function 末尾添加了 javascript 绑定代码。

因此,每当用户尝试从购物车中删除商品时,ajax 代码就会被执行,并且 response update_blocks 将再次绑定到购物车,即使在初始 javascript 绑定之后也是如此。

添加的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);    
            });    
        });    
    }

【讨论】:

    猜你喜欢
    相关资源
    最近更新 更多
    热门标签