2011-03-11 98 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調用一樣。