当我想从AJAX Cart中一个接一个地删除多个产品时,对于第一个产品,它可以正常工作,但当我试图删除另一个产品时页面会重定向到删除页面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();
}
如果我能得到一些帮助,我将不胜感激。提前谢谢。
我得到了一个解决方案,它与Javascript绑定问题有关。问题是,当你从购物车中删除一个产品时,所有的购物车块都会更新。因此,它删除了已经绑定的javascript。
我在ajaxcart.js中的updateBlocks函数的末尾添加了javascript绑定代码。
因此,每当用户试图从购物车中删除项目时,ajax代码就会被执行,响应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.jsupdateBlocks函数添加代码后,
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);
});
});
}