освежить сеанс - PullRequest
       31

освежить сеанс

1 голос
/ 11 марта 2011

Есть ли способ обновить сеанс 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 ]

7 голосов
/ 11 марта 2011

Это имеет мало общего с ColdFusion, и больше связано с очень распространенным шаблоном проектирования Ajax.Вы правильно поняли большую часть этого;Вот общая идея:

  1. Пользователь нажимает [delete].

  2. Функция обработчика JavaScript отправляет идентификатор элемента, который нужно удалить, на вашОбработчик 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-версия области, которую нужно переписать.-drawn.
  4. В обработчике Ajax success получена обновленная информация о просмотре. Затем вы:

    • Зацикливайте данные JSON и создавайте соответствующий HTML-код в JavaScript, затем перетаскивайте его в свою область контейнера (возможно, с помощью механизма шаблонов) или ...
    • Вставьте полностью визуализированный 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
    }
    
1 голос
/ 11 марта 2011

Абсолютно.Когда вы делаете запрос AJAX, вы делаете запрос как пользователь ... поэтому, если вы вносите какие-либо изменения в сеанс, он вносит эти изменения в сеанс пользователя.При этом, если вы хотите перерисовать страницу корзины, вам нужно будет сделать все это с помощью клиентского JavaScript, как вы делаете вызов AJAX.

...