购物车元素移除后,页面重载代码location.reload()插入位置咨询
购物车移除元素后页面重载的位置分析
首先梳理你的代码逻辑,先明确核心前提:如果所有操作(修改购物车数组、更新状态、写入Cookie、关闭弹窗)都是同步执行,location.reload()的正确位置是放在所有同步操作的最后,但要先修复原代码里的语法错误——原代码缺失大括号、分号,会导致逻辑执行异常。
修改后的完整代码(同步场景)
$('#r_btc').on('click', function(a) { a.preventDefault(); var b = jQuery.grep(ecomm._vCRT, function(f) { return f.s == pCRT._rIDS }); if ('x' == b[0].t) { ecomm._vCRT = jQuery.grep(ecomm._vCRT, function(f) { return f.s != pCRT._rIDS }); b[0].b = jQuery.grep(b[0].b, function(f) { return f != pCRT._rIDB }); if (0 < b[0].b.length) { ecomm._vCRT.push({ s: b[0].s, t: b[0].t, b: b[0].b, o: b[0].o, p: b[0].p }); ecomm.updBStat(pCRT._rIDB, pCRT._rIDS, 1, 0); } else { ecomm._vCRT = jQuery.grep(ecomm._vCRT, function(f) { return f.s != pCRT._rIDS }); } } else { jQuery.grep(b, function(f) { var g = jQuery.grep(f.b, function(h) { return h[0] != pCRT._rIDB[0] }); b[0].b = ''; b[0].b = g; }); ecomm._vCRT = jQuery.grep(ecomm._vCRT, function(f) { return f.s != pCRT._rIDS }); if (0 < b[0].b.length) { ecomm._vCRT.push({ s: b[0].s, t: b[0].t, b: b[0].b }); } else { ecomm._vCRT = jQuery.grep(ecomm._vCRT, function(f) { return f.s != pCRT._rIDS }); } ecomm.updBStat(pCRT._rIDB, pCRT._rIDS, 1, 0); } pCRT._rIDB = 0; pCRT._rIDS = 0; pCRT._rPVP = 0; pCRT.iCRT(); ecomm.chkSTCK(); app.cCookie('cart', JSON.stringify(ecomm._vCRT), 30); $('#confirmation-reveal').foundation('close'); // 所有同步操作完成后执行页面重载 location.reload(); });
异步场景特殊处理
如果ecomm.updBStat是异步AJAX请求(用于同步后端购物车状态),直接放在最后会导致页面在后端数据更新完成前就刷新,出现数据不一致问题。这种情况下需要给updBStat添加回调函数,在异步请求成功后再执行后续操作和重载:
- 修改
updBStat调用逻辑:
// 替换原代码中的ecomm.updBStat调用,添加回调参数 ecomm.updBStat(pCRT._rIDB, pCRT._rIDS, 1, 0, function() { // 异步操作完成后执行剩余同步步骤+重载 pCRT._rIDB = 0; pCRT._rIDS = 0; pCRT._rPVP = 0; pCRT.iCRT(); ecomm.chkSTCK(); app.cCookie('cart', JSON.stringify(ecomm._vCRT), 30); $('#confirmation-reveal').foundation('close'); location.reload(); });
- 确保
ecomm.updBStat内部在AJAX请求成功时触发传入的回调函数。
内容的提问来源于stack exchange,提问作者Luis Pérez
相关产品推荐
相关产品推荐

