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

Php 删除时Magento Ajax购物车重定向到删除页面,php,jquery,ajax,magento-1.9,Php,Jquery,Ajax,Magento 1.9,当我想从AJAX购物车中逐个删除多个产品时,对于第一个产品,它工作正常,但是当我尝试删除另一个产品时,它会重定向到删除页面URL,如 SiteURL/checkout/cart/delete/id/012/uenc/aHR0cDovLzEyMi 并显示一些json或html数据,如{message:Item已被删除,..update_块:[{key:.header.links,value: 从购物车中删除项目功能deleteAction public function deleteAction(

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

并显示一些json或html数据,如{message:Item已被删除,..update_块:[{key:.header.links,value:

从购物车中删除项目功能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();
    }

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

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

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

因此,每当用户试图从购物车中删除一个项目时,ajax代码就会被执行,响应更新块将再次绑定到购物车,即使在初始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);    
            });    
        });    
    }

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

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

因此,每当用户试图从购物车中删除一个项目时,ajax代码就会被执行,响应更新块将再次绑定到购物车,即使在初始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);    
            });    
        });    
    }

请提供ajax响应。@Shivanand当我尝试删除第二个产品时,页面将重定向到删除页面,显示JSON中的消息项目已删除,在页面更新块和分页符上打印所有JSON。在页面上打印ajax响应,如-->{消息:项目已删除,更新块:[{key:.header.links,value:..请在app/code/local/Mage/Checkout/controllers/CartController.php或app/code/core/Mage/Checkout/controllers/CartController.php文件中以及在ajaxDeleteAction函数中提供代码。@Shivanand Delete功能运行良好。仅在第二次产品删除时,在删除页面上重定向时出现问题。我认为这是正确的与JS相关,而不是与PHP文件相关。您认为呢???如果您检查两个产品的删除url,url操作是ajaxDelete。当您单击该url时,它会使用ajax删除该产品,并重新加载Microicart块并使用ajax加载。完成后,删除url必须类似于domain.com/checkout/cart/ajaxDelete/id/29/uenc/xxxxx不是站点url/checkout/cart/delete/id/012/uenc/aHR0cDovLzEyMi。此url将使用php代码。请提供ajax响应。@Shivanand当我尝试删除第二个产品时,页面将重定向到删除页面,显示JSON中的消息项已删除,在页面更新块和分页符上打印所有JSON。打印ajax响应在类似-->>{message:Item已被删除,update_块:[{key:.header.links,value:..请在app/code/local/Mage/Checkout/controllers/CartController.php或app/code/core/Mage/Checkout/controllers/CartController.php文件中以及在ajaxDeleteAction函数中提供代码。@Shivanand Delete功能运行良好。仅在第二次产品删除时,在删除页面上重定向时出现问题。我认为这是正确的与JS相关,而不是与PHP文件相关。您认为呢???如果您检查两个产品的删除url,url操作是ajaxDelete。当您单击该url时,它会使用ajax删除该产品,并重新加载Microicart块并使用ajax加载。完成后,删除url必须类似于domain.com/checkout/cart/ajaxDelete/id/29/uenc/xxxxx不是站点url/checkout/cart/delete/id/012/uenc/aHR0cDovLzEyMi。此url将使用php代码。