有没有办法在不重新加载页面的情况下刷新页面上的coldfusion会话?假设我的购物车中有3件商品。现在,我想通过点击产品旁边的“删除”链接来删除其中一个项目。我创建了delete_item.cfm,它使用jquery ajax从购物车中删除特定商品。现在我希望我的购物车只显示2个项目而不重新加载页面。这是我的代码。
<CFIF ISDEFINED("ProductID")>
<!--- Find where in the basket it is --->
<CFSET ItemPosition = ListFind(session.StoreItems,ProductID)>
<CFSET session.StoreItems = ListDeleteAt(session.StoreItems, ItemPosition, ",")>
<CFSET session.StoreItemsQty = ListDeleteAt(session.StoreItemsQty, ItemPosition, ",")>
答案 0 :(得分:7)
这与ColdFusion没什么关系,更多的是与一个非常常见的Ajax设计模式有关。你已经把大部分都做对了;这是一般的想法:
用户点击[delete]
。
JavaScript处理程序函数将要删除的项的ID发送到服务器上的delete_item.cfm
处理程序。 示例:的
$('a.deletelink').click( function(e){
e.preventDefault();
$.ajax({
url : '/handlers/delete_item.cfm',
data : $(this).data('id'),
type : 'post',
success : /* see below */
});
});
在服务器上,另一个函数检索受更改影响的页面区域的更新视图 - 现在没有已删除的项目。 delete_item.cfm
调用此函数,将更新的视图信息返回给Ajax请求者。这可以采取以下形式:
在Ajax调用的success
处理程序中,收到更新的视图信息。然后:
delete_item.cfm
提供的完全呈现的HTML,替换最初包含您要删除的项目的旧版本。 示例:的
/* success handler from above */
function(data){ // data is what's returned from delete_item.cfm
// Assuming it's fully rendered HTML post-deletion:
$('#container_of_your_list')
.html( data ) // drop in new data
.effect('highlight',{},2000); // visual feedback to user
}
答案 1 :(得分:1)
绝对。当您发出AJAX请求时,您正在以用户身份发出请求...因此,如果您对会话进行任何更改,它将在用户的会话中进行这些更改。话虽这么说,如果你想重新绘制购物车页面,你需要使用客户端javascript完成所有这些操作,就像你正在进行AJAX调用一样。