当我想从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();
}
如果能得到一些帮助,我将非常感激。提前谢谢。
答案 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);
});
});
}