2011-03-11 168 views
1

有没有办法刷新页面上的coldfusion会话而无需重新加载页面?假设我的购物车中有3件商品。现在,我想通过点击产品旁边的“移除”链接来移除其中一个项目。我创建了delete_item.cfm,它使用jquery ajax从购物车中删除特定项目。现在,我希望我的购物车仅显示2个项目,而无需重新加载页面。这是我的代码。coldfusion会话刷新

<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, ",")> 

回答

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. success处理Ajax调用的,更新后的视图信息被接收。然后,您:

    • 遍历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 
    } 
    
+0

更深入的答案比我的,即使我的是仍然是正确的:)。肯应该得到这个答案。 – 2011-03-11 04:09:22

+0

@丹,答案的长度与我回答回避的任务的平庸成正比。 – 2011-03-11 04:23:40

+0

我非常同情那种感觉:) – 2011-03-11 05:39:42

1

绝对。当您发出AJAX请求时,您以用户的身份发出请求...所以如果您对会话进行了任何更改,它将在用户会话中进行这些更改。话虽如此,如果您想重新绘制购物车页面,则需要使用客户端JavaScript执行所有这些操作,就像您在进行AJAX调用一样。