coldfusion会话刷新

Dmi*_*try 1 ajax coldfusion session 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, ",")>
Run Code Online (Sandbox Code Playgroud)

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

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

    • 循环遍历JSON数据并在JavaScript中构建适当的HTML,然后将其放入容器区域(可能使用模板引擎),或者......
    • 放入提供的完全呈现的HTML delete_item.cfm,替换最初包含您要删除的项目的旧版本.

    例:

    /* 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
    }
    
    Run Code Online (Sandbox Code Playgroud)