Magento Ajax 购物车删除时重定向到删除页面
Magento Ajax cart On delete redirect to Delete page
当我想从 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();
}
如果能得到一些帮助,我将不胜感激。提前致谢。
我找到了解决方案,它与 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.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 购物车中一个一个地删除超过 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();
}
如果能得到一些帮助,我将不胜感激。提前致谢。
我找到了解决方案,它与 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.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);
});
});
}