coldfusion会话刷新

时间:2011-03-11 01:48:54

标签: ajax session coldfusion shopping-cart

有没有办法在不重新加载页面的情况下刷新页面上的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, ",")>

                 

2 个答案:

答案 0 :(得分:7)

这与ColdFusion没什么关系,更多的是与一个非常常见的Ajax设计模式有关。你已经把大部分都做对了;这是一般的想法:

  1. 用户点击[delete]

  2. 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 */
      });
    });
    
  3. 在服务器上,另一个函数检索受更改影响的页面区域的更新视图 - 现在没有已删除的项目。 delete_item.cfm调用此函数,将更新的视图信息返回给Ajax请求者。这可以采取以下形式:

    • 原始数据,可能是JSON字符串形式,或者......
    • 要重新绘制的区域的完全呈现的HTML版本。
  4. 在Ajax调用的success处理程序中,收到更新的视图信息。然后:

    • 遍历JSON数据并在JavaScript中构建相应的HTML,然后将其放入容器区域(可能使用模板引擎),或者......
    • 放入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调用一样。